簡體   English   中英

java如何調用T的超類方法(泛型)

[英]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.

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