帮助了解Java反射-->;安卓包裹容器
我正在玩Android框架,试图让我的思想更深入地了解Java。为此,我阅读了Javas泛型和反射API,但我并不真正理解它。 因为我是一个懒惰的开发者;)我试图编写一个“可包裹容器”,在其中我可以放置任何我希望可以包裹的对象,而无需使用Java反射方法再次为每个对象实现这一点 我编写了如下测试方法:帮助了解Java反射-->;安卓包裹容器,java,android,generics,reflection,Java,Android,Generics,Reflection,我正在玩Android框架,试图让我的思想更深入地了解Java。为此,我阅读了Javas泛型和反射API,但我并不真正理解它。 因为我是一个懒惰的开发者;)我试图编写一个“可包裹容器”,在其中我可以放置任何我希望可以包裹的对象,而无需使用Java反射方法再次为每个对象实现这一点 我编写了如下测试方法: public <T> void writeClassInformations(T t){ Class c = t.getClass(); System
public <T> void writeClassInformations(T t){
Class c = t.getClass();
System.out.println("DeclaredFields: ");
for (Field f : c.getDeclaredFields()){
System.out.println(f.toGenericString());
}
System.out.println("Fields: ");
for (Field f: c.getFields()){
System.out.println(f.toGenericString());
}
}
还是
?myClass
对其使用反射。这是Java反射能力的终结吗?如何获得类?
反射应尽量少用,如果可以避免的话,也不能使用反射,尤其不能作为绕过良好设计原则的一种方式。也就是说,它在某些情况下也很有用
getDeclaredFields
可以返回所有类型的字段,而getFields
仅返回标记为public的字段
测试返回相同内容的原因是在这两个语句中都使用了getDeclaredFields
如何获取“myID”的值
您只能通过对类的实例进行操作来实现这一点。例如:
T t = ...
Field field = t.getClass().getDeclaredField("myID");
field.setAccessible(true);
String value = (String) field.get(t);
要回答第二个问题,请使用Field.get(),传入实例对象(t)。如果其中有多个成员,则返回哪个字段?Field.get(对象,参数…)。你从你称之为“get”的字段中得到值,从你传入的对象中得到值。Thx,你说的一切都是对的。但正如我所写,这只是为了测试和学习的目的。
T t = ...
Field field = t.getClass().getDeclaredField("myID");
field.setAccessible(true);
String value = (String) field.get(t);