我试图只允许特定的类被interact方法使用。该代码不会编译,也无法将基础类识别为超类的一部分。
我使用以下结构:
抽象类可交互
抽象类建筑扩展了可交互性
抽象类 ContainerBuilding 扩展了建筑物
类刀具扩展了ContainerBuidling
为什么下面的代码无法编译? Cutter.class无法识别为建筑类。
public static void main ( String[] args ) {
ActionTest.<Building>interact ( Cutter.class );
}
public static <T extends Interactable> void interact ( Class<T> interactableClass ) {
// do something
}
也不会编译:
public static void main ( String[] args ) {
ActionTest.interact ( Cutter.class );
}
public static void interact ( Class<Interactable> interactableClass ) {
// do something
}
答案 0 :(得分:2)
在第一个示例中,将interactableClass
的类型更改为Class<? extends T>
:
public static <T extends Interactable> void interact ( Class<? extends T> interactableClass )
这是因为Java中的泛型是不变的,这意味着如果将参数声明为Class<Building>
,则在以<Building>interact(...)
调用该方法时,将无法传递Class<T>
以外的任何内容。