我正在使用Java API,这需要我实现许多相当大的接口。但是通常只有一两个细节实际上在实现之间有所不同,所以我做了一些抽象基类来提供大部分实现。
不过现在香港专业教育学院遇到,我需要从其他类扩展和/或实现多个这样的接口,所以我无法延长我的抽象基类的情况。
在C ++中,我能够使用多重继承,并且还使用其他一些技巧,如下所示。但是,Java不允许以这种方式使用多重继承或泛型。
class MyClass : public HelperForInterfaceA, public HelperForInterfaceB {...};
class template<class BASE> MyHelper : public BASE {...};
我现在所拥有的最好的办法是让具体实现我的抽象辅助类作为一个领域,然后让所有的接口方法着该领域的实例,与具有主要对象的引用来实现外地最后的细节,如果需要的话。
class MyClass extends A implements IB, IC {
private static class B extends BAbstractHelper {
private A a;
public B(A a, int size) {
super(size);
this.a = a;
}
@Override
public boolean foo(int x, int y) {
return a.foo(x, y);
}
}
private static class C extends CAbstractHelper {
...
}
private B b;
private C c;
private int range;
@Override
public boolean foo(int x, int y) {
return x*x + y*y <= range*range;
}
@Override
public float bar(float x, int y, String s) {
return b.bar(x,y,s);
}
...
}
然而,这似乎有点痛苦,需要很多包装方法。有没有更好的方法来解决这个问题?
答案 0 :(得分:0)
Java最佳实践是优先考虑组合而不是继承。保持简单,但创建更多的样板代码。您有正确的想法来创建委托方法。一个好的Java IDE可以为您生成所有样板代理方法代码。像Scala这样的JVM上的其他语言(具有特征)使这更容易。