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
是否可以在 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