好吧,我知道你不能有抽象的靜態方法,儘管我個人認爲這是個限制。我也知道覆蓋靜態方法是沒用的,因爲當我處理MyList<T extends ObjectWithId>
這樣的處理,並且我的對象有一個抽象類,並且在它的子類中有一個被重寫的靜態方法時,T在運行時不存在,所以ObjectWithId
的靜態方法是而不是子類。在java中使用泛型的抽象靜態/靜態替代方法的替代方案
因此,這裏是我:
class PersistentList<T extends ObjectWithId> implements List<T>{
}
其中ObjectWithId
是:
abstract ObjectWithId{
public abstract long getId();
}
現在的問題是,我的PersistentList意味着存儲在硬盤上,因此得名,並實際上只會存儲它所持有的對象的ID。現在,當我想要實現的PersistentList
的
@Override
public T get(int index) {
}
方法,我想是我的程序來使用它存儲index
的id
和調用靜態方法objectForId(long id)
這將在ObjectWithId
每個子類實現。它不能成爲實例方法,因爲現在還沒有實例,重點是使用id
從硬盤加載實例。那麼它應該如何實施?一種選擇是讓ObjectWithId
在每個子類中都有一個構造函數ObjectWithId(long id)
,但T在運行時不存在,那麼我將如何實例化它?我知道我可以在PersistentList
的構造函數中傳遞Class<T>
對象,但我更喜歡如果構造函數沒有任何參數,但我不認爲有沒有辦法在沒有明確傳遞它的情況下獲取T類?
我希望這是一個更好的解釋,對於我開始的模棱兩可的問題感到抱歉。
真的是你的問題:「我如何得到一個通用參數的類型」?如果是這樣,那麼已經有很多問題了,例如, http://stackoverflow.com/questions/182636/how-to-determine-the-class-of-a-generic-type,http://stackoverflow.com/questions/1372432/how-to-obtain-class-type-實例泛型參數類型,http://stackoverflow.com/questions/2223233/how-to-get-generics-class等 –