如果你试图通过用某个表达式替换“some expression”来尝试传递一个不扩展public void x(List<Class<some expression>> m)
的类,我希望方法class A{}
抛出一个错误。
当我使用通配符或不包含通配符时,我总是会收到一个恼人的警告,所以我想理解为什么Class应该得到一个维度,即使我完全偏离它的使用方式。< / p>
答案 0 :(得分:2)
我不完全得到你想做的事。实际上,这个方法签名:
public void x(List<? extends YourClass> m)
如果你传递的List
个类的类没有扩展YourClass
,那么将无法编译(让我们这样称呼它,而不是A
)。
如果您希望x
方法作为参数获取Class
个对象的列表,那么这是另一个问题。你确定你不愿意只传递List
类扩展YourClass
的对象吗?如果是这样,该方法签名应该有效。
编辑:既然您声明要传递一个类列表,那么这应该有效:
public void x(List<Class<? extends YourClass>> m)
以这种方式测试:
import java.util.*;
class YourClass {}
class YourClassEx extends YourClass {}
public class Test {
public static void x(List<Class<? extends YourClass>> m) {
// stuff...
}
public static void main(String[] argv) {
List<Class<? extends YourClass>> list = new ArrayList<>();
list.add(YourClass.class);
list.add(YourClassEx.class);
x(list); // compiles fine until here
list.add(String.class); // doesn't compile
x(new ArrayList<Class>()); // doesn't compile, either
}
}