簡體   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