class MClass
{
private int mem1,mem2,mem3.......;
public int getmem1()
{
return mem1;
}
public int getmem2()
{
return mem2;
}
......
现在我想要这样的事情:
public int getAttr(String attr)
{
if (attr=="mem1")
return mem1;
elseif (attr=="mem2")
return mem2;
.....
如何实现1000个attr的getAttr?
请不要让我把mem作为数组......由于程序的其他部分而无法实现。
答案 0 :(得分:7)
使用反射。 Reflection
这将允许您在运行时使用方法名称作为String调用任何公共方法。
Class c = Class.forName("MyClass");
Method m = c.getMethod("get"+arg);
return (Integer) m.invoke(this);
答案 1 :(得分:4)
我建议您创建Map<String, Integer> attrMap
并执行
public int getAttr(String attr) {
return attrMap.get(attr);
}
答案 2 :(得分:1)
您创建了Map<String,Object>
。作为关键,您使用attr作为值的值。
class MyCall {
private final Map<String,Object> map = new HashMap<String,Object>();
public Object getAttr(String attr) {
return map.get(attr);
}
}
如果值始终为整数,则可以将通用参数Object
替换为Integer
。
public int getAttr(String attr) {
if(map.contains(attr)) {
return map.get(attr).intValue();
} else {
reutrn ERROR_CODE; //As error or throw exception
}
}