我想要方法public void x(List<Class<some expression>> m)
如果您尝试传递不扩展 class A{}
的类,则会抛出错误将“某些表达式”替换为...某些表达式。
当我使用通配符或不包含通配符时,我总是会收到恼人的警告,因此我想了解为什么 Class 值得拥有一个维度,即使我对它的使用方式完全不了解。
最佳答案
我不太明白你想做什么。实际上,这个方法签名:
public void x(List<? extends YourClass> m)
如果您传递一个List
对象,其类不扩展YourClass
(我们这样调用它,而不是A
),则不会编译)。
如果您希望 x
方法获取 Class
对象列表作为参数,那是另一个问题。您确定不愿意只传递扩展 YourClass
的类的对象 List
吗?如果是这样,该方法签名应该可以工作。
编辑:既然您声明要传递类列表,那么这应该可行:
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
}
}
关于java - Java 类构造函数中尖括号的用途是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15393176/