man*_*nub 96
Class
是一个可参数化的类,因此您可以使用语法Class<T>
where T
是一个类型.通过写入Class<?>
,您将声明一个Class
可以是任何类型的对象(?
是通配符).该Class
类型是包含类元信息的类型.
通过指定他的特定类型来引用泛型类型总是很好的做法,方法是使用Class<?>
您尊重这种做法(您知道Class
可以参数化),但是您并不限制您的参数具有特定类型.
关于泛型和通配符的参考:http://docs.oracle.com/javase/tutorial/java/generics/wildcards.html
关于Class
对象和反射的参考(用于内省自身的Java语言的特性):http://java.sun.com/developer/technicalArticles/ALT/Reflection/
And*_*s_D 60
这<?>
是一头野兽.它经常导致混乱和错误,因为,当你第一次看到它,然后你开始相信,<?>
是任何java类型的通配符.这是......不是真的.<?>
是一种未知的类型,一个轻微和讨厌的差异.
使用它时不是问题Class
.这两行都可以工作和编译:
Class anyType = String.class;
Class <?> theUnknownType = String.class;
Run Code Online (Sandbox Code Playgroud)
但是 - 如果我们开始将它与集合一起使用,那么我们会看到奇怪的编译时错误:
List<?> list = new ArrayList<Object>(); // ArrayList<?> is not allowed
list.add("a String"); // doesn't compile ...
Run Code Online (Sandbox Code Playgroud)
我们List<?>
不是一个集合,适用于任何类型的对象.它只能存储一种类型:神秘的"未知类型".当然,这不是真正的类型.
这意味着您的Class引用可以包含对任何Class对象的引用.
它与"类"基本相同,但是你向其他人展示了你没有忘记泛型的代码,你只需要一个可以容纳任何Class对象的引用.
Bruce Eckel,Thinking in Java:
在Java SE5中,Class <?>比普通类更受欢迎,即使它们是等效的,如您所见,普通类也不会产生编译器警告.Class <?>的好处是它表明你不仅仅是偶然使用非特定的类引用,也不是出于无知.您选择了非特定版本.
归档时间: |
|
查看次数: |
102756 次 |
最近记录: |