[英]Understanding Class<?>
我遇到了这段代码:
public class RestfulAdage extends Application {
@Override
public Set<Class<?>> getClasses() {
Set<Class<?>> set = new HashSet<Class<?>>();
set.add(Adages.class);
return set;
}
}
我不明白Class<?>
意思。
Class<?>
指的是一类未知类型。 该表示法使用无界泛型 ,它对可添加到Collection的类的类型没有限制。 例如,以下内容不起作用
Set<Class<String>> set = new HashSet<Class<String>>();
set.add(Adages.class); // type not allowed
Class是一个可参数化的类,因此您可以使用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/
在通用代码中,称为通配符的问号(?)表示未知类型。 通配符可用于各种情况:作为参数,字段或局部变量的类型; 有时作为返回类型(虽然更好的编程实践更具体)。 通配符从不用作泛型方法调用,泛型类实例创建或超类型的类型参数。
以下部分更详细地讨论通配符,包括上限有界通配符,下限有界通配符和通配符捕获。
欲了解更多信息, 请点击此
它指的是gererics。 我建议你读一点。 基本上,您只知道在运行时使用哪种类型的对象。 例如,Class可以是Integer,String甚至是YourDefinedClassType
在这里阅读http://java.sun.com/developer/technicalArticles/J2SE/generics/
来自: 通配符
在通用代码中,称为通配符的问号(?)表示未知类型。 通配符可用于各种情况:作为参数,字段或局部变量的类型; 有时作为返回类型(虽然更好的编程实践更具体)。 通配符从不用作泛型方法调用,泛型类实例创建或超类型的类型参数。
查看链接,您将找到更详尽的文档,示例等。
假定你有一组属于不同类型的 类 ,并且你有不同的类的实例也是如此。 因此,如果要检查这些实例是否是这些类之一的实例 ,您可以遍历这些集并完成工作。 对于那种工作,你最好使用完全不受限制的套装:
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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.