7

hibernate 如何访问 java 类的私有字段/方法,例如设置 @Id ?

谢谢

4

3 回答 3

10

就像 Crippledsmurf 所说,它使用反射。请参阅反射:打破所有规则休眠:保留对象的合同

于 2009-07-11T09:57:59.143 回答
4

尝试

import java.lang.reflect.Field;

class Test {
   private final int value;
   Test(int value) { this.value = value; }
   public String toString() { return "" + value; }
}

public class Main {
   public static void main(String... args) throws NoSuchFieldException, IllegalAccessException {
       Test test = new Test(12345);
       System.out.println("test= "+test);

       Field value = Test.class.getDeclaredField("value");
       value.setAccessible(true);
       System.out.println("test.value= "+value.get(test));
       value.set(test, 99999);
       System.out.println("test= "+test);
       System.out.println("test.value= "+value.get(test));
   }
}

印刷

test= 12345
test.value= 12345
test= 99999
test.value= 99999
于 2009-07-11T15:12:08.733 回答
3

猜测我会说这是通过反射目标类型并直接使用反射设置字段来完成的

我不是 java 程序员,但我相信 java 具有类似于我使用的 .NET 的反射支持

于 2009-07-11T09:56:39.160 回答