小序言。我是1.4 jdk上的优秀Java开发人员。之后我切换到另一个平台,但在这里我遇到了问题,所以问题是关于 jdk 1.6(或更高版本:))。我有 3 个耦合类,耦合的性质与本地方法有关。波纹管是这3类的例子

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

于是就有了接口(interface)A,它是由AOperations以原生方式实现的,而AImpl只是将方法调用委托(delegate)给了原生方法。
这些关系是自动生成的。一切正常,但我遇到了问题。有时像 A 这样的接口(interface)需要公开迭代器功能。我可以影响接口(interface),但不能改变实现(AImpl)。

在 C# 中说我可以通过简单的部分解决问题:
(C# 示例)
partial class AImpl{
 ... //here comes auto generated code
}

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

因此,有部分或类似的java类似物。

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

编辑 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 不支持部分或开放类。其他 JVM 语言可以,但 Java 不行。在您的示例中,不幸的是,最简单的事情可能是使用委托(delegate)。你可以让你的 AImpl 使用另一个对象来实现这些扩展方法的接口(interface)。生成的 AImpl 然后会生成方法,例如迭代器方法,它可以委托(delegate)给您传入的用户创建的对象。

10-05 20:48