2013-05-05 134 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); 

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