![](/img/trans.png)
[英]Java Generics: Returning object of generic class with type parameter that is a super of argument T
[英]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.