簡體   English   中英

Java中的通用方法未返回預期的類型

[英]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只會認為TObject

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM