请求帮助理解Java Reflection --> Android ParcelableContainer
我正在尝试使用 Android 框架并尝试更深入地了解 Java。为此,我阅读了有关 Java 泛型和反射 API 的内容,但我并没有真正理解它。 因为我是一个懒惰的开发人员;)我尝试编写一个“Parcelable-Container”,在其中我可以放置任何我希望获得 Parcelable 的对象,而无需使用 Java Reflection 的方法再次为每个对象实现此功能。
我编写了这样的测试方法:
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(E object)
这样的构造函数。虽然在我看来,我无法在 ?
上使用对象方法,但我什至无法将其传递到类变量中,例如
public ParcelableBox<?> createFromParcel(Parcel source){
...
return new ParcelableBox<?>();
}
或 ? myClass
在其上使用反射。这是javas反射能力的终结吗?我怎样才能获得的类?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
应该谨慎使用反射,或者如果可以避免的话根本不使用反射,特别是不要将其作为绕过良好设计原则的一种方式。话虽这么说,它在某些情况下也很有用...
getDeclaredFields
可以返回所有类型的字段,而getFields
仅返回标记为公共的字段。您的测试返回相同内容的原因是您在两个语句中都使用了 getDeclaredFields。
如何获取“myID”的值
您只能通过操作类的实例来实现这一点。例如,
Reflection should be used sparingly, or not at all if it can be avoided, and especially not as a way to hack around good design principles. That being said, it can also be useful in certain situations ...
getDeclaredFields
can return all types of fields whilegetFields
only returns fields marked public.The reason your test returns the same thing is that you're using
getDeclaredFields
in both statements.how I get the value of 'myID'
You can only do that by operating on an instance of a class. E.g.,