[英]Generic method in java not returning the type expected
我創建了一個通用方法toList():
public static <T> List<T> toList(T... args){
List<T> list = new ArrayList<T>();
for (T t : args) {
list.add(t);
}
if(list instanceof Comparable<?>){
System.out.println("The list was considered a list of Comparable objects");
}
if(list instanceof Serializable){
System.out.println("The list was considered a list of Serializable objects");
}
if(list instanceof Object){
System.out.println("The list was considered a list of Object class' objects");
}
return list;
}
我正在像這樣調用此方法:
public static void main(String[] args) {
System.out.println(Generics.<Comparable>toList(1,2,"3"));
}
我期待着因為我已經提供了Comparable類型,所以第一個if條件將為true,而o / p將首先為Comparable,然后是Object。 但是令我驚訝的是,如果並且o / p是Serializable然后是Object,則控件沒有首先進入。
任何人都可以闡明其背后的原因嗎? 我也不清楚在訪問修飾符之后在方法簽名中應用T的概念。
我們已經提到了訪問說明符,修飾符和返回類型。 供應T有什么需要?
您正在對列表對象而不是對列表元素執行斷言。
list instanceof Comparable<?>
僅當列表本身將實現Comparable
接口時,才返回true
。 由於ArrayList
是可序列化的,並且當然是對象,因此其他兩個條件的評估結果為true
。
在我看來,您要嘗試的是測試方法內部的元素類型T
由於類型擦除(遵循鏈接),您無法執行此操作。 T
的實際類型僅在編譯時才知道,而在運行時則不知道。 在運行時,在方法內部,Java只會認為T
是Object
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.