Java类构造函数中尖括号的用途是什么?
我想要方法public void x(List<Class<some expression>> m)
抛出一个错误,如果你试图通过用一些表达式替换“some expression”来扩展class A{}
的类。Java类构造函数中尖括号的用途是什么?
当我使用通配符或不包含它时,我总是会遇到一个令人讨厌的警告,所以我想了解为什么Class应该有一个维度,即使我完全没有使用该维度。
我并不完全明白你想要做什么。其实,这种方法的签名:如果您传递对象,它的类的List
不延长YourClass
public void x(List<? extends YourClass> m)
不会编译(姑且称之为如此,而不是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
}
}
正如我在问题中所说的,显然我认为,x需要一个类对象列表。 – Zackkenyon 2013-03-13 18:18:38
我更新了我的答案。 – gd1 2013-03-13 18:29:22
请贴全码 – Biswajit 2013-03-13 18:10:57
你应该重新阅读[泛型的Java教程](http://docs.oracle.com/javase/tutorial/java/generics/)和[Angelika Langer的常见问题](http://www.angelikalanger.com/GenericsFAQ/JavaGenericsFAQ.html ) - 我很肯定他们会继续这样做。然后用你想要工作或不工作的代码的例子来提出一个更具体的问题。 – millimoose 2013-03-13 18:13:56
即完整代码... – Zackkenyon 2013-03-13 18:17:28