是否可以按类名获取静态属性?

时间:2013-06-09 08:30:41

标签: java android class reflection static

例如,我需要从我自己的类Class1或Class2中获取静态属性(两个类的属性名称相同)依赖于用户操作。我在String变量中只有类名。如何获得这个属性?

当然,我可以这样做:

InfoClass ic;
if(className.equals("Class1")) {
    ic=Class1.prop;
} else if(className.equals("Class2")) {
    ic=Class2.prop;
}

但这不是那么好的解决方案,我认为......还有其他方法可以实现吗?

2 个答案:

答案 0 :(得分:1)

使用反射:

Class.forName("mypackage.MyClass").getDeclaredField("field").get(null);

答案 1 :(得分:1)

你可以这样做,但正如评论中所提到的,它甚至不如你当前的解决方案那么整洁。

Class clazz = Class.forName(qualifiedClassName);
Field field = clazz.getDeclaredField("prop");
ic = (InfoClass)field.get(null);

很可能有一种不同的方式来做你在你的应用程序中做的任何事情,这不需要反思或一长串的条件;但我对你的问题知之甚少,不知道那是什么。