2013-05-05 102 views
0

我有一個基本問題。獲取具有另一個屬性的類的屬性

有幾個類,擴展另一個類(「技能」)。
「技能」包含了一些抽象方法,如:

public abstract int getID(); 
public abstract String getName(); 
public abstract String getDescription(); 

和子類:

@Override 
public int getID() 
{ 
    return 69; 
} 

@Override 
public String getName() 
{ 
    return "name"; 
} 

@Override 
public String getDescription() 
{ 
    return "description"; 
} 

現在,讓我們說我需要得到id爲「89」的子類的描述。

是否有這樣做,比擁有一個HashMap存儲ID->類名,然後通過執行獲得類的對象更簡單的方法如下?:

Class cl = Class.forName(classname); 
Object o = cl.getConstructor().newInstance(); 
Method m = cl.getMethod("getDescription"); 
return (String) m.invoke(o); 
+2

這是一個大代碼的氣味。你爲什麼要找出這樣的班級呢? – 2013-05-05 18:50:19

+0

確實如此。這就是爲什麼我要求更好的方法。例如:一名玩家獲得一個buff。後來,我需要檢查一下,如果玩家仍然擁有這個buff,而且我只有這個ID。但考慮一下,我也可以直接存儲buff的實例.. – dr0n3 2013-05-05 19:10:11

+0

閱讀此:http://steve-yegge.blogspot.com/2008/10/universal-design-pattern.html – 2013-05-05 19:32:31

回答

0

好吧,無論你得到了「89 「從,應該有存儲創建不使用反射產品總數匹配的情況下稍微工廠方法的地方......

0
Map<Integer,YourObject> yourMap = new HashMap<Integer,YourObject>(); 
yourMap.put(89,new YourObject(89,"description","name")); 
yourMap.put(69,new YourObject(69,"description1","name1")); 
.. 

YourObject eight_nine = yourMap.get(89); 

是不是一個很好的方法,以達到你所需要的?