如果您尝试通过将“某些表达式”替换为...某些表达式public void x(List<Class<some expression>> m)
来传递不扩展的类,我希望方法抛出错误。class A{}
当我使用通配符或不包含通配符时,我总是会收到一个烦人的警告,所以我想了解为什么 Class 值得一个维度,即使我完全不知道它是如何使用的。
如果您尝试通过将“某些表达式”替换为...某些表达式public void x(List<Class<some expression>> m)
来传递不扩展的类,我希望方法抛出错误。class A{}
当我使用通配符或不包含通配符时,我总是会收到一个烦人的警告,所以我想了解为什么 Class 值得一个维度,即使我完全不知道它是如何使用的。
我不完全明白你想要做什么。实际上,这个方法签名:
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
}
}