【发布时间】:2011-02-19 17:17:36
【问题描述】:
我正在使用 Android 框架并尝试让我的思想更深入地了解 Java。为此,我阅读了有关 Java 泛型和反射 API 的信息,但我并没有真正理解它。 因为我是一个懒惰的开发者;)我尝试编写一个“Parcelable-Container”,我可以在其中放置任何我希望将其 Parcelable 的对象,而无需使用 Java 反射方法再次为每个对象实现此功能。
我写了一个这样的测试方法:
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());
}
}
如何获取每个成员,即使他们是对象或私有超类成员? 还有一个问题:输出是这样的:
public int hello.test.Testclass.myID
我如何获得“myID”的值?
添加:
我现在遇到了严重的问题。 Parcelable.Creator 的接口迫使我写这样的语句:public static final Parcelable.Creator CREATOR =
new Parcelable.Creator<ParcelableBox<?>>()
我可以以某种方式使用? 吗?通常我使用像ParcelableBox(E object) 这样的构造函数。虽然在我看来我不能在 ? 上使用 Object 方法,但我什至不能将它传递给像
public ParcelableBox<?> createFromParcel(Parcel source){
...
return new ParcelableBox<?>();
}
或? myClass 对其使用反射。这是java反射能力的终结吗?我怎样才能得到?的类
【问题讨论】:
-
回答你的第二个问题——使用 Field.get(),传入实例对象 (t)。
-
如果我有多个成员,它会返回哪个字段?
-
field.get(对象,参数...)。您从该字段中获取您调用“get”的值,然后从传入的对象中获取值。
标签: java android generics reflection