簡體   English   中英

Java泛型:為什么編譯器無法告知該類 <T> 對象具有與此類的type參數的對象的類相同的類型?

[英]Java generics: Why can't the compiler tell that this Class<T> object has the same type as the class of an object of this class' type parameter?

當obj具有類型T時,為什么需要將obj.getClass()的返回值強制轉換為Class <T>類型? 這也會產生一個警告,我已將其靜音。 但是我覺得這不是必須的。 這里發生了什么?

public class DataSerialization<T> {
    private T deserializedObject;
    private Class<T> classObject;
    private String serializedObject = null;

    private static final Gson gson = new Gson();

    @SuppressWarnings("unchecked")
    public DataSerialization(T obj) {
        this.deserializedObject = obj;
        this.classObject = (Class<T>) obj.getClass();
    }

    // ...
}   

簡而言之,這是因為getClass方法返回Class<?> ,無論對象實際上是哪種類型的類。 在這種情況下,即使類型Class<?>的引用指向類型為Class<T>的對象,方法簽名也將返回類型定義為Class<?> ,這就是編譯器期望的結果。

對於編譯器,您正在將Class<?>強制轉換為Class<?> Class<T> ,並且會發出警告,因為無法通過單獨的返回類型來確保確實如此。

暫無
暫無

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

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