使用泛型/接口在Java中实现复合

使用泛型/接口在Java中实现复合,java,generics,Java,Generics,我有一个简单的例子: public class Imap { private Responder responder; public Imap(){ this.responder = new Responder(this); } public void startService(){ responder.doStuff(); } public boolean supportsMe(){ retu

我有一个简单的例子:

public class Imap {
    private Responder responder;

    public Imap(){
        this.responder = new Responder(this);
    }

    public void startService(){
        responder.doStuff();
    }

    public boolean supportsMe(){
        return true;
    }
}

public class Udp {
    private Responder responder;

    public Udp(){
        this.responder = new Responder(this);
    }

    public void startService(){
        responder.doStuff();
    }

    public boolean supportsMe(){
        return false;
    }
}

public class Responder {
    Object parent;

    public Responder(Object parent){
        this.parent = parent;
    }

    public void doStuff(){
        if(parent.supportsMe()){
            System.out.println("Parent supports me.");
        } else {
            System.out.println("Parent doesn't support me.");
        }
    }
}
问题是对象的supportsMe未定义。但是,它是为Udp和Imap定义的。我希望响应者足够聪明,能够调用正确的对象。我相信解决方案是使用带有接口的泛型。我尝试了以下泛型,但仍然得到一个类似的编译错误(类型T的方法supportsMe()未定义):

公共类响应程序{
T亲本;
公共响应者(T家长){
this.parent=parent;
}
公共空间{
if(parent.supportsMe()){
System.out.println(“家长支持我”);
}否则{
System.out.println(“家长不支持我。”);
}
}
}

我的问题有什么解决办法吗?

访客模式。不要在构造函数中泄漏此。传入
响应程序
并让它访问
父级
。使
Imap
Udp
实现一些接口
支持的
,该接口声明了
支持SME
方法。然后让
响应程序
将其
父项
字段声明为类型
受支持的
@SotiriosDelimanolis,该字段有效@BoristheSpider这将如何导致内存泄漏?这不是内存泄漏,而是一个错误。在
实际存在之前,传递对
的引用。这个问题可能非常严重,并且很难调试。考虑这是否是类层次结构的父类——子Cor还没有完成。这应该永远避免。
public class Responder<T> {
    T parent;

    public Responder(T parent){
        this.parent = parent;
    }

    public void doStuff(){
        if(parent.supportsMe()){
            System.out.println("Parent supports me.");
        } else {
            System.out.println("Parent doesn't support me.");
        }
    }
}