[英]java how to call superclass method of T (generics)
我有以下方法。 我想找到T是否有超類,如果是,那么調用超類的cloneEntity方法
public Clone(Class<T> typeParameterClass) {
this.typeParameterClass = typeParameterClass;
}
public T cloneEntity(){
T clonedEntity = typeParameterClass.newInstance();
Class superClass = typeParameterClass.getSuperclass();
if(superClass != null){
//call clone method of the superclass to copy superclass properties
?????????
}
}
更多解釋
我不是試圖實例化超類。 我正在嘗試創建一個說地址的實例。 Address擴展BaseEntity並具有deepCopy()方法。 BaseEntity本身有一個deepCopy()方法。 在創建Address實例后,我想在Address上調用deepCopy()方法然后在超類BaseEntity上調用
更多解釋
我想擺脫每個對象中的deepCopy()方法,如Address,User等,並創建一個通用的方法。 因此T可以是Address或User,但我想在泛型實現中調用T的超類
每個沒有顯式extends
的類都有java.lang.Object
作為超類(接口和原語不是類),所以檢查不是你想的那樣。
如果要檢查類是否實現了cloneable,可以執行以下操作:
Cloneable.class.isAssignableFrom( YourType.class );
鑒於你已經創建了一個類的實例,一個糟糕的舊instanceof
和一個演員應該可以做到這一點。 然而,反思幾乎從來都不是正確的答案。
首先,在超類上調用clone()
需要一些反射黑客,因為clone()
在Object中受到保護。
但是在Object中定義的舊式clone()有什么問題(在Cloneable中有記錄)? 這涉及總是調用super.clone(),所以對你的情況應該沒問題。
您只需要一個將clone()
聲明為public的接口,然后您的T應該看起來像<T extends ThatInterface>
。 您還可以擁有一個實現ThatInterface
的抽象類,並為clone()
提供一個默認實現 - 就像您嘗試在發布的代碼中實現的那樣。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.