我碰到這樣的代碼:理解類<?>
public class RestfulAdage extends Application {
@Override
public Set<Class<?>> getClasses() {
Set<Class<?>> set = new HashSet<Class<?>>();
set.add(Adages.class);
return set;
}
}
我不明白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<?>
是指一類未知的類型。該符號使用unbounded generic,它對可添加到集合中的類的類型沒有限制。例如,以下是行不通的
Set<Class<String>> set = new HashSet<Class<String>>();
set.add(Adages.class); // type not allowed
的實例,但如果這是真的,那麼爲什麼會失敗:set.add(「hello」)< - 我認爲它可以採取任何類型? – user3134565
只能加null?這有什麼好處呢? – user3134565
@ user3134565 - 「hello」是字符串實例,不是類實例。你可以放入'String.class'而不是字符串實例。你也可以把''你好。「.getClass()' – Avi
它指的是gererics。我建議你閱讀一下。基本上,你只知道在運行時使用什麼類型的對象。例如,類可以是整數,字符串或甚YourDefinedClassType
這裏讀http://java.sun.com/developer/technicalArticles/J2SE/generics/
那麼,這是否意味着它可以採用任何類型的對象,如字符串,整數,雙精度等等? – user3134565
set.add(「dd」)失敗,並且只有null ...爲什麼是 – user3134565
@ user3134565閱讀泛型,而不僅僅是人們告訴你的!你無法學習簡單的方法。你嘗試添加一個對象的實例,你需要一個類 – diazazar
來源:(?)Wildcards
在通用代碼,問號,稱爲通配符,表示一個未知類型。通配符可用於多種情況:作爲參數,字段或局部變量的類型;有時作爲返回類型(儘管更好的編程實踐更具體)。通配符永遠不會用作泛型方法調用,泛型類實例創建或超類型的類型參數。
檢查鏈接,你會發現更多詳盡的文檔,示例等
類是參數化類,因此你可以使用語法類,其中T是一個類型。通過編寫Class,您聲明瞭一個可以是任何類型的Class對象(?是通配符)。類類型是包含關於類的元信息的類型。
通過使用Class來尊重這種做法(您知道Class是可參數化的),但通過指定一個泛型來引用泛型,這總是一種很好的做法,但您並沒有限制您的參數具有一個特定的類型。
參考關於泛型和通配符:http://docs.oracle.com/javase/tutorial/java/generics/wildcards.html
參考關於類對象和反射的(用於內省自身的Java語言的特徵):(?)http://java.sun.com/developer/technicalArticles/ALT/Reflection/
在通用代碼,問號,稱爲通配符表示未知類型。通配符可用於多種情況:作爲參數,字段或局部變量的類型;有時作爲返回類型(儘管更好的編程實踐更具體)。通配符永遠不會用作泛型方法調用,泛型類實例創建或超類型的類型參數。
以下部分將更詳細地討論通配符,包括上限制通配符,下位限制通配符和通配符捕獲。
瞭解更多信息click here
假設您有一組類屬於不同類型的的,你有以及不同類的實例。因此,如果你想檢查這些實例是否是instanceof這些類中的一個,則可以遍歷這些集合並完成這項工作。而對於這種工作,你最好使用一個完全無限制集合:
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;
}
我的意思是類> – user3134565
檢查http://stackoverflow.com/questions/290982/java-class-type – Yuan