相关疑难解决方法(0)

使用Java Reflection检索继承的属性名称/值

我有一个Java对象'ChildObj',它从'ParentObj'扩展而来.现在,如果可以使用Java反射机制检索ChildObj的所有属性名称和值,包括继承的属性?

Class.getFields为我提供了公共属性数组,Class.getDeclaredFields为我提供了所有字段的数组,但它们都没有包含继承的字段列表.

有没有办法检索继承的属性呢?

java reflection introspection

118
推荐指数
7
解决办法
7万
查看次数

从类中获取所有字段(甚至私有和继承)

我正在做大学项目.
我需要从课堂上获得所有领域.甚至私人和继承.我试图获取所有声明的字段,然后转换为超类并重复.我的代码片段:

private void listAllFields(Object obj) {
    List<Field> fieldList = new ArrayList<Field>();
    while (obj != null) {
        fieldList.addAll(Arrays.asList(obj.getClass().getDeclaredFields()));
        obj = obj.getClass().getSuperclass().cast(obj);
    }
    // rest of code
Run Code Online (Sandbox Code Playgroud)

但它不起作用.tmpObj在铸造之后仍然是同一个类(不是超类).
我将不胜感激任何帮助如何解决铸造问题,或如何以不同的方式检索这些字段.

问题不是获取字段的访问权限,而是获取字段的名称!
我这样管理它:

private void listAllFields(Object obj) {
    List<Field> fieldList = new ArrayList<Field>();
    Class tmpClass = obj.getClass();
    while (tmpClass != null) {
        fieldList.addAll(Arrays.asList(tmpClass .getDeclaredFields()));
        tmpClass = tmpClass .getSuperclass();
    }
    // rest of code
Run Code Online (Sandbox Code Playgroud)

java reflection

52
推荐指数
4
解决办法
8万
查看次数

使用反射设置私有字段值

我有2个班级:FatherChild

public class Father implements Serializable, JSONInterface {

    private String a_field;

    //setter and getter here

}

public class Child extends Father {
    //empty class
}
Run Code Online (Sandbox Code Playgroud)

有了反射,我想a_fieldChild课堂上设置:

Class<?> clazz = Class.forName("Child");
Object cc = clazz.newInstance();

Field f1 = cc.getClass().getField("a_field");
f1.set(cc, "reflecting on life");
String str1 = (String) f1.get(cc.getClass());
System.out.println("field: " + str1);
Run Code Online (Sandbox Code Playgroud)

但我有一个例外:

线程"main"中的异常java.lang.NoSuchFieldException:a_field

但如果我尝试:

Child child = new Child();
child.setA_field("123");
Run Code Online (Sandbox Code Playgroud)

有用.

使用setter方法我有同样的问题:

method = cc.getClass().getMethod("setA_field");
method.invoke(cc, new Object[] { "aaaaaaaaaaaaaa" });
Run Code Online (Sandbox Code Playgroud)

java reflection

46
推荐指数
4
解决办法
6万
查看次数

扩展类中的Java反射字段值

可能重复:
通过Java中的反射访问私有继承的字段

你好我hava用java反射的init值有问题.

我有简单的课程

 public class A extends B {
     private String name;
 }

  public class B {
     private String superName;   
  }
Run Code Online (Sandbox Code Playgroud)

而且我也有简单的功能:

   public void createRandom(Class<T> clazz , List<String> classFields){


    try {
        T object = clazz.newInstance();
        for(String s : classFields){
            clazz.getDeclaredField(s);
        }

    } catch(Exception e){

    }

   }
Run Code Online (Sandbox Code Playgroud)

我的功能做其他的东西,但我有问题,因为我有错误:

java.lang.NoSuchFieldException: superName
Run Code Online (Sandbox Code Playgroud)

如何使用反射从超类设置所有类字段也字段?

我有所有类字段(也继承),我正在使用函数,field.set(Object obj, Object value)但这样我不能设置继承的类字段:/

我没有问题得到所有类字段我使用Spring ReflectionUtils.doWithfield.我存储了所有字段名称List<String> classField,所以我知道所有clazz字段也都继承了.但我的问题是如何将值设置为所有clazz字段.

java reflection

1
推荐指数
2
解决办法
2万
查看次数

访问成员类的私有成员

我有一个A类,私人成员是myMember.还有一个B级,有一个A级私人成员,叫做myA;

那是:

public class A{
    private int myMember;
    ...
}

public class B{
    private A myA;

}
Run Code Online (Sandbox Code Playgroud)

我希望能够访问:

B.myA.myMember;
Run Code Online (Sandbox Code Playgroud)

但似乎我不能,因为myMember在A中是私有的.事实上,我需要将A定义为私有用于练习(也包括它无法保护).有没有解决的办法?

谢谢.

java

0
推荐指数
1
解决办法
148
查看次数

标签 统计

java ×5

reflection ×4

introspection ×1