小序言。我是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)给您传入的用户创建的对象。