Как спящий режим может получить доступ к приватному полю? - PullRequest
6 голосов
/ 11 июля 2009

Как hibernate может получить доступ к закрытому полю / методу java-класса, например, для установки @Id?

Спасибо

Ответы [ 3 ]

10 голосов
/ 11 июля 2009
4 голосов
/ 11 июля 2009

Попробуйте

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
3 голосов
/ 11 июля 2009

В предположении я бы сказал, что это делается путем отражения типа цели и установки полей непосредственно с помощью отражения

Я не программист Java, но я считаю, что в Java есть поддержка отражений, аналогичная .NET, которую я использую

...