我真的不想提出这个问题。也许是因为某种愚蠢但是冗长给了我这样的限制......所以我希望你能和我一起点燃...谢谢。
我有一个简单的界面和一堆方法。
public interface MyInterface
{
public Integer getSolution();
public void setSolution(final Integer a);
public void markAsSent(final boolean sent);
public boolean wasSent();
......
......
}
我们正在扩展ZK components
Textbox,Datebox,Bandbox,Decimalbox
我们有像
这样的东西 public class CustomTextBox extends Textbox implements MyInterface
{}//we add the implementations of the methods...
当我需要扩展另一个ZK components Datebox,Bandbox,Decimalbox and so on.
MyInterface
的方法实现与ALL相同。
只会像这样改变类的扩展....
public class CustomBandBox extends Bandbox implements MyInterface
public class CustomComboBox extends Combobox implements MyInterface
public class CustomDecimalBox extends Decimalbox implements MyInterface
因为我非常讨厌冗长,所以我想创建一个类MyInterface
的实现,并且还扩展Zk Components
,因为Java不允许多重继承,我该如何做这样的事情。
使用Generics
或任何帮助的任何解决方法都非常感谢..
我们正在使用Java 7
我认为可以使用Java 8
在defaults methods
中解决这个问题,但我仍然坚持使用7
答案 0 :(得分:3)
在这种情况下你应该使用构图。参考战略设计模式,可能来自我最喜欢的DP书籍Head First Design Patterns。它在第一章中描述为一个设计原则,你应该经常考虑组合而不是过度使用继承。
在MyInterface中声明的行为应该在onw类中强制执行,并通过合成来实现:
public class MyImplementation implements MyInterface {
// perhaps you need a reference to the ZK Component here
private Component comp;
public MyImplementation(Component comp){
this.comp = comp;
}
}
public class CustomBandBox extends Bandbox implements MyInterface {
private MyImplementation impl = new MyImplementation(this);
public Integer getSolution(){
return impl.getSolution();
}
}
答案 1 :(得分:1)
你将基本思想所在的扩展链接起来:
class Base { ... }
class FirstBase extends Base { ... }
class SecondBase extends FirstBase { ... }
但是如果你试图在你的例子中实现它会很麻烦,所以我会使用组合,因为它更清洁并且提供了很大的灵活性。