了解类<?>

我碰到这个代码:

public class RestfulAdage extends Application { @Override public Set<Class<?>> getClasses() { Set<Class<?>> set = new HashSet<Class<?>>(); set.add(Adages.class); return set; } } 

我不明白Class<?>是什么意思。

Solutions Collecting From Web of "了解类<?>"

Class<?>指的是一个未知types的类。 符号使用无限制的generics ,对可以添加到Collection中的类的types没有限制。 例如以下将无法正常工作

 Set<Class<String>> set = new HashSet<Class<String>>(); set.add(Adages.class); // type not allowed 

Class是一个可参数化的类,因此可以使用语法Class,其中T是一个types。 通过编写Class,您可以声明一个可以是任何types的Class对象(?是通配符)。 类types是包含有关类的元信息的types。

通过指定他的具体types来引用一个genericstypes总是一个很好的习惯,通过使用你尊重这个练习的类(你知道Class是可参数化的),但是你并没有限制你的参数具有特定的types。

有关generics和通配符的参考: http : //docs.oracle.com/javase/tutorial/java/generics/wildcards.html

关于Class对象的引用和反思(用于反思自身的Java语言的特性): http : //java.sun.com/developer/technicalArticles/ALT/Reflection/

在generics代码中,被称为通配符的问号(?)表示未知types。 通配符可用于多种情况:作为参数的types,字段或局部variables; 有时作为返回types(尽pipe更好的编程实践更具体)。 通配符永远不会用作generics方法调用,generics类实例创build或超types的types参数。

以下部分更详细地讨论通配符,包括上限通配符,下限通配符和通配符捕获。

更多信息请点击这里

它指的是gererics。 我build议你阅读一下。 基本上,你只知道在运行时使用什么types的对象。 例如,Class可以是Integer,String或者YourDefinedClassType
请阅读http://java.sun.com/developer/technicalArticles/J2SE/generics/

来自: 通配符

在generics代码中,被称为通配符的问号(?)表示未知types。 通配符可用于多种情况:作为参数的types,字段或局部variables; 有时作为返回types(尽pipe更好的编程实践更具体)。 通配符永远不会用作generics方法调用,generics类实例创build或超types的types参数。

检查链接,你会发现更详尽的文件,例子等

假设你有一组属于不同types的类 ,并且你也有不同类的实例。 所以如果你想检查这些实例是否是这些类中的一个,你可以遍历这些集合并完成这个工作。 而对于这样的工作,你最好使用完全不受限制的设置:

 public boolean checkClasses(Set<Class<?>> typeLessClassSet, Set instances){ while(typeLessClassSet.hasNext()){ Class c = typeLessClassSet.next(); while(instances.hasNext()){ Object o = instances.next(); if(o instanceof c) return true; } } return false; }