我有一个要求,我必须编写一个接受“字符串”的方法,并且基于此字符串,我需要返回MyObject类型的对象。这可以通过使用开关盒来完成,但是如何动态地实现呢?
在以下情况下,可以通过将“ myObject1”作为字符串来调用方法,然后此方法应返回myObject1对象。这怎么做。
public class HelloWorld {
MyObject myObject1 = new MyObject();
MyObject myObject2 = new MyObject();
MyObject myObject3 = new MyObject();
public MyObject getMyObject(String string)
{
return <<myObject1 or 2 or 3 based on string parameter name>>;
}
}
class MyObject {
}
如果您真的想做这样的事情,倒影是您的朋友。您可以按名称查找声明的字段,然后使用它们查找实例变量。
我已经修改了您的示例,使其包括一个主要方法,该方法可以查找MyObject的每个实例,并且还包含一个失败案例。我还修改了MyObject,以便您可以轻松判断已找到哪个实例。
import java.lang.reflect.Field;
public class Reflection {
MyObject myObject1 = new MyObject("1");
MyObject myObject2 = new MyObject("2");
MyObject myObject3 = new MyObject("3");
public MyObject getMyObject(final String string) {
try {
final Field declaredField = this.getClass()
.getDeclaredField(string);
final Object o = declaredField.get(this);
if (o instanceof MyObject) {
return (MyObject) o;
}
} catch (final Exception e) {
}
return null;
}
class MyObject {
final String name;
public MyObject(final String name) {
this.name = name;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return name;
}
}
public static void main(final String[] args) {
final Reflection r = new Reflection();
System.out.println(r.getMyObject("myObject1"));
System.out.println(r.getMyObject("myObject2"));
System.out.println(r.getMyObject("myObject3"));
System.out.println(r.getMyObject("invalid"));
}
}
Oracle Java文档中有一些有关反射的有用信息。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句