Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/198.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
帮助了解Java反射-->;安卓包裹容器_Java_Android_Generics_Reflection - Fatal编程技术网

帮助了解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

我正在玩Android框架,试图让我的思想更深入地了解Java。为此,我阅读了Javas泛型和反射API,但我并不真正理解它。 因为我是一个懒惰的开发者;)我试图编写一个“可包裹容器”,在其中我可以放置任何我希望可以包裹的对象,而无需使用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());
        }
}

还是
?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);