【问题标题】:Java two-way parameterized classJava 双向参数化类
【发布时间】:2021-11-20 17:49:12
【问题描述】:

在java中可以做到这一点而没有问题吗? 我的 IDE 将我的代码突出显示为“参数化类 'Etat' 的原始使用”和“对 'add(E)' 的未经检查的调用作为原始类型 'java.util.ArrayList' 的成员” 我的代码:

public abstract class Etat<T extends Transition> {}
public abstract class Transition<E extends Etat> {}

【问题讨论】:

    标签: java generics parameterized


    【解决方案1】:

    您可能正在寻找:

    class Etat<E extends Etat<E, T>, T extends Transition<E, T>>  {}
    class Transition<E extends Etat<E, T>, T extends Transition<E, T>> {} 
    

    那么,你可以这样做:

    class MonEtat extends Etat<MonEtat, MaTransition> {}
    class MaTransition extends Transition<MonEtat, MaTransition> {}
    

    允许这两种类型通过它们的类型参数相互了解。例如,如果您声明:

    class Etat<E extends Etat<E, T>, T extends Transition<E, T>> {
        abstract E apply(T transition);
    }
    

    您可以放心

    MonEtat e = ...;
    e = e.apply(new MaTransition()); // compiles, and knows that MonEtat is returned
    

    【讨论】:

    • 感谢您的回答,这是我的问题的解决方案。就在您的第一个代码块上,该类的参数与第三个和第二个的顺序不同。
    • 糟糕。本可以发誓我已经解决了这个问题,但我显然没有从 eclipse 中复制它。现已修复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多