1 回答

TA贡献1816条经验 获得超6个赞
首先,Serializerpackage 下没有这个java.util,所以你使用的是别的东西。
Antrait被翻译成 Java interface,它本身不能有字段。
但是,您正在尝试通过Pet界面访问该字段
pet.class.getField(...)
那是行不通的。您需要在混凝土内部寻找字段class。
此外,该字段将private默认为,因为访问权限是通过getter.
该getField方法能够检索public整个类层次结构(甚至是超类)的每个字段,同时getDeclaredField能够检索protected和private字段,但只能在您调用它的确切类上。您还需要调用setAccessible(true),因为
值为 true 表示反射对象在使用时应禁止 Java 语言访问检查。值为 false 表示反射对象应强制执行 Java 语言访问检查
正确的代码是(dog是具体实例)
final Field uuid = dog.getClass().getDeclaredField("uuid_");
uuid.setAccessible(true);
final Object o = uuid.get(dog);
或者使用自动getter
final Method uuid = dog.getClass().getMethod("uuid_");
final Object o = uuid_.invoke(dog);
添加回答
举报