java部分类

小序言。 我是1.4 jdk的优秀java开发人员。 在它之后,我已经切换到另一个平台,但在这里我遇到问题所以问题强烈关于jdk 1.6(或更高:))。 我有3个耦合类,与本机方法有关的耦合性质。 贝娄是这三class的榜样

public interface A { public void method(); } final class AOperations { static native method(. . .); } public class AImpl implements A { @Override public void method(){ AOperations.method( . . . ); } } 

所以有接口A,由AOperations以本机方式实现,而AImpl只是将方法调用委托给本机方法。 这些关系是自动生成的。 一切都好,但我有问题。 有时像A这样的接口需要暴露迭代器function。 我可以影响接口,但不能改变实现(AImpl)。

在C#中说我可以通过简单的部分解决问题:(C#sample)

 partial class AImpl{ ... //here comes auto generated code } partial class AImpl{ ... //here comes MY implementation of ... //Iterator } 

所以,有部分或类似的java模拟。

编辑 :根据@pgras的评论,我需要一些澄清。 AImpl不在真空中,有一些工厂(本机实现)返回AImpl的实例,这就是为什么从AImpl创建inheritance不适用。

编辑2 :可能它没有关系,但它是如何由JUnit 4完成的:

 public class SomeTest { ... //there is no direct inheritance from Assert, but I can use follow: assertTrue(1==1); //HOW DOES it works?? 

Java不支持partials或open类。 其他JVM语言可以,但不是Java。 在您的示例中,最简单的事情可能是使用委托。 您可以让您的AImpl使用另一个实现这些扩展方法接口的对象。 生成的AImpl将生成方法,例如迭代器方法,它可以委托给您传入的用户创建的对象。

 How about that: Compute.java = your class Compute$.java = base class for partial classes. Reference a Compute object Compute$Add.java = your partial class. Subclass Compute$. Compute$Sub.java = your partial class. Subclass Compute$. 

文件Compute.java

 public class Compute { protected int a, b; Compute$Add add; Compute$Sub sub; public Compute() { add = new Compute$Add(this); sub = new Compute$Sub(this); } public int[] doMaths() { int radd = add.add(); int rsub = sub.sub(); return new int[] { radd, rsub }; } } 

file计算$ .java

 public abstract class Compute$ { protected Compute $that; public Compute$(Compute c){ $that=c; } } 

file Compute $ Add.java

 public class Compute$Add extends Compute$ { public Compute$Add(Compute c) { super(c); // TODO Auto-generated constructor stub } public int add(){ return $that.a+$that.b; } } 

file Compute $ Sub.java

 public class Compute$Sub extends Compute$ { public Compute$Sub(Compute c) { super(c); } public int sub() { return $that.a - $that.b; } } 

你可以扩展A(比如接口B扩展A)并扩展AImpl并实现B(类BImpl扩展AImpl实现B)……