Java 双向参数化 class

Java two-way parameterized class

是否可以在 java 中毫无问题地执行此操作? 我的 IDE 将我的代码突出显示为“参数化 class 'Etat' 的原始使用”和“作为原始类型 'java.util.ArrayList' 的成员对 'add(E)' 的未检查调用” 我的代码:

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

您可能正在寻找:

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