用泛型和接口实现组合

4
我希望实现以下内容:
我的类X有一个泛型Y,但是这个泛型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();
    }
}

如何在不使用抽象类和构造函数实现组合的情况下实现我的目标?


你能给一个代码示例吗?这些东西如果没有一些“真实的内容”很难谈论... - GhostCat
很难确定您的确切需求,但也许这里找到的信息 https://dev59.com/Nm855IYBdhLWcg3weEKJ 可以帮助您。 - dsp_user
完成,同时添加了一些细节。 - Tom Connery
另外,请遵循Java命名规范。当你不遵循时,你的代码会变得难以阅读。 - Lew Bloch
1个回答

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();       
    }

}

你能否展示一下在这种情况下你会如何编写Goal类?很遗憾我无法真正理解你的意思。为什么添加第二个泛型可以解决这个问题呢? - Tom Connery
1
@DellConagher,我添加了你的Goal类的实现。 - Calculator

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接