dimanche 14 juin 2015

Java reflection - get field value

I try make class which generate new className.java file using reflection. I have problem with Fields value.

Here is my test class.

public class ClassTest {
@Deprecated
private int a;


public int[] b;

private final String c = "Hi";
...
}

Method in which I try generate fields.

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);
    }
}

Error is on third field private final String c = "Hi";

Exception in thread "main" java.lang.NullPointerException
at sun.reflect.UnsafeFieldAccessorImpl.ensureObj(UnsafeFieldAccessorImpl.java:57)
at sun.reflect.UnsafeObjectFieldAccessorImpl.get(UnsafeObjectFieldAccessorImpl.java:36)

I have tried add field.setAccessible(true); but with there error comes on second field. Any ideas what is bad?





Aucun commentaire:

Enregistrer un commentaire