[英]Java best practices: Put/Get SubClass objects into HashMap that expects SuperClass objects
假設我使用SuperClass
將HashMap實例化為值類型。 然后我將SubClass
對象作為值添加到Map。 當我從Map中檢索這些值時,它們將作為SuperClass
類型的對象返回,我明確地將其轉換回Subclass
:
class SuperClass {}
class SubClass1 extends SuperClass { int one;}
class SubClass2 extends SuperClass { int two;}
class DoSomething {
DoSomething() {
Map<String, SuperClass> map = new HashMap<String, SuperClass>();
map.put("1", new SubClass1());
map.put("2", new SubClass2());
SubClass1 one = (SubClass1) map.get("1");
}
}
我需要知道返回的對象是特定的SubClass
因為我想訪問僅存在於SubClass中的方法。 如果返回的類型可以是任意數量的不同SubClasses,那么在確定類型和轉換時是否使用instanceof
最佳實踐?
SuperClass s = map.get("1");
if (s instanceof SubClass1) {
(SubClass1)s.one = 1;
}
謝謝
根據具體情況,有很多方法可以解決這個問題:
最佳實踐應該是將每個SubClass類型放在不同的Map中。
在執行轉換之前使用instanceof,如果你真的需要進行轉換,那么這是一個好主意,因為這樣你就可以防止出現ClassCastException。
請注意,如果您的代碼有很多instanceof指令,那么您可能會有一個糟糕的設計。
如果你想把它們放在同一個Map中,你需要考慮你的設計:
讓你的DoSomething類知道不同的SubClass類型來執行特定的操作嗎?我看到3種可能性:
是的,你絕對應該使用instanceof來進行類型安全。 否則,你怎么知道你拔出的對象實際上是否是正確的子類?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.