Java多扩展Zk组件变得非常冗长

时间:2014-09-29 23:06:59

标签: java oop interface zk extends

我真的不想提出这个问题。也许是因为某种愚蠢但是冗长给了我这样的限制......所以我希望你能和我一起点燃...谢谢。

我有一个简单的界面和一堆方法。

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 8defaults methods中解决这个问题,但我仍然坚持使用7

2 个答案:

答案 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 { ... }

但是如果你试图在你的例子中实现它会很麻烦,所以我会使用组合,因为它更清洁并且提供了很大的灵活性。