Java反射-获取字段值

Java反射-获取字段值,java,reflection,field,Java,Reflection,Field,我尝试使用反射生成新的className.java文件的类。我对字段值有问题 这是我的测试课 public class ClassTest { @Deprecated private int a; public int[] b; private final String c = "Hi"; ... } 我尝试在其中生成字段的方法 private void writeAttributes(Class<?> cls, PrintWriter writer){ Field[

我尝试使用反射生成新的className.java文件的类。我对字段值有问题

这是我的测试课

public class ClassTest {
@Deprecated
private int a;


public int[] b;

private final String c = "Hi";
...
}
我尝试在其中生成字段的方法

private void writeAttributes(Class<?> cls, PrintWriter writer){
    Field[] atr = cls.getDeclaredFields();
    for (Field field : atr) {

        this.writeAnnotations(writer, field.getDeclaredAnnotations());
        writer.write(Modifier.toString(field.getModifiers())+" " + field.getType().getTypeName()+ " " + field.getName());
        try{
            System.out.println(field);
            // NULL POINTER EXCEPTION there
            Object value = field.get(null);
            if(value!= null){
                writer.write(" = " + value.toString());
            }
        }catch(IllegalAccessException ex){

        }
        writer.write(";");
        this.writeNewLine(writer);
    }
}

我已尝试添加
field.setAccessible(true)但第二个字段出现错误。知道什么不好吗?

因为这是一个实例字段,您需要将类的实例传递给
get
方法:

get(clsInstance);
事实上,政府对此相当清楚:

抛出NullPointerException-如果指定的对象为null且字段为实例字段


无法使用.getDeclaredFields()访问专用字段。您只能访问公共字段。

是否可以在没有实例的情况下获取
最终非静态字段的值?@dsv_dsv No,此类字段可以通过
最终int i=new Random().nextInt()初始化在每个实例中可能有不同的值。这完全是错误的。它是
getFeilds
,它只能访问公共字段(包括继承的字段),
getDeclaredFields
返回包含类中声明的所有字段(包括私有字段)的数组。
get(clsInstance);