繁体   English   中英

理解类<?>

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM