理解类<?>

use*_*565 18 java generics android

我遇到了这段代码:

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

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

Rei*_*eus 13

Class<?>是指一类未知类型.该表示法使用无界泛型,它对可添加到Collection的类的类型没有限制.例如,以下内容不起作用

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


Yog*_*tia 7

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/


小智 7

在通用代码中,称为通配符的问号(?)表示未知类型.通配符可用于各种情况:作为参数,字段或局部变量的类型; 有时作为返回类型(虽然更好的编程实践更具体).通配符从不用作泛型方法调用,泛型类实例创建或超类型的类型参数.

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

欲了解更多信息,请点击此

  • 你能解释我更多吗? (2认同)

dia*_*zar 5

它指的是gererics.我建议你读一点.基本上,您只知道在运行时使用哪种类型的对象.例如,Class可以是Integer,String甚至是YourDefinedClassType,
在这里阅读http://java.sun.com/developer/technicalArticles/J2SE/generics/


Arn*_*lle 5

来自:通配符

在通用代码中,称为通配符的问号(?)表示未知类型.通配符可用于各种情况:作为参数,字段或局部变量的类型; 有时作为返回类型(虽然更好的编程实践更具体).通配符从不用作泛型方法调用,泛型类实例创建或超类型的类型参数.

查看链接,您将找到更详尽的文档,示例等.