我有2個類,B
和C
,他們需要跟蹤他們的實例,所以他們每個人都有一個ArrayList
他們各自類型的實例添加到構造函數。如何確定當前類的類型?
由於這看起來很常見,我試圖找到某種標準的Java接口或類來表達這種行爲,如接口InstanceManager
。我沒有找到任何
我最終試圖爲它寫一個抽象類,並且因爲我不知道如何指定子類的特定類型而卡住了。 例如:
public abstract class C { public static ArrayList<C> list; }
public class A extends C { }
public class B extends C { }
在這種情況下,B.list
或A.list
將C
對象的名單,但我真的希望他們能夠B
和A
對象列表,分別。
有什麼辦法可以讓這種情況輕易發生?
我沿着
public abstract class C { public static ArrayList<thisclass> list; }
行思考的東西,但會顯然是不行的。
我意識到我可以使用泛型來處理這個問題,但它感覺多餘,我不禁希望有一種方法可以在這種情況下以某種方式推斷子類的類型。
此外,是否有任何標準的Java接口來處理實例管理或唯一實例ID生成?
編輯:
我已經明白,靜態變量不是繼承的,子類的靜態變量實際上是指同一件事。因此,有什麼辦法可以定義實例管理行爲而不訴諸冗餘,必須在所有子類中寫入相同的東西?在運行時
abstract class C<T> {
public List<T> list;
}
class A extends C<A> {
}
class B extends C<B> {
}
如果這是一個「靜態」持有者,那你的運氣不好。 'A'和'B'都將共享相同的列表。 – 2014-11-04 16:58:27
爲什麼不使用Map>,根據我的運行時類型 –
yurib
2014-11-04 16:59:51
@yurib將每個實例插入到適當的列表中,但這意味着要有所有子類的集中式集合,並且我寧願擁有每種類型都有不同的列表。 – RedCat23 2014-11-04 17:05:39