2017-03-05 73 views
4

我想实现如下:实现泛型和接口组成

我的类X有一个通用的Y.然而,这一般Ÿ需要访问X的资源,我想处理这种通过接口以允许其他人从任意选择的类继承。然而

我目前的做法导致仿制药的循环:

public interface X<y extends Y<x extends X<y extends...>>> { 

    Object getO(); 

} 

public interface Y<x extends X<y extends Y<x extends ....>>> { 

    void doSomething(); 

} 

我想实现什么:

public class Goal<x X<y (this class)> implements Y { 

    private final x minix; 

    public Goal(x minix) { 
     this.minix = minix; 
    } 

    @Override 
    public doSomething() { 
     x.getO(); 
    } 
} 

如何实现我的目标,而不使用抽象类的常见方式和构造函数的实现?

+0

可不可以给一点的例子代码?如果没有一些“真正的肉”,这种事情很难说... – GhostCat

+0

很难确定你的确切需求,但也许在这里找到的信息http://stackoverflow.com/questions/4326017/implementing-generic- java中的interface可以帮助你。 –

+0

完成,并添加了一些细节。 –

回答

1

接口的泛型类型参数相互依赖。要解决你必须引入第二个类型参数为每个接口的递归:

interface X<A extends Y<A, B>, B extends X<A, B>> { 

    A getY(); //example  
    Object getO(); 

} 

interface Y<A extends Y<A, B>, B extends X<A, B>> { 

    B getX(); //example 
    void doSomething(); 

} 

目标类别:

public class Goal<B extends X<Goal<B>, B>> implements Y<Goal<B>, B> { 

    private final B minix; 

    public Goal(B minix) { 
     this.minix = minix; 
    } 

    @Override 
    public B getX() { 
     return minix; 
    } 

    @Override 
    public void doSomething() { 
     minix.getO();  
    } 

} 
+0

您能否在这种情况下展示如何编写目标课程?我真的不能真的跟着你。为什么要增加第二个通用解决方案? –

+1

@DellConagher我添加了一个目标类的实现。 – Calculator