22 Kasım 2018 Perşembe

Field Sınıfı

Giriş
Şu satırı dahil ederiz.
import java.lang.reflect.Field;
constructor
Elimde şöyle bir sınıf olsun
public class Foo
{
  private int theAnswer = 42;
  ....
}
Şöyle yaparız.
Field field = Foo.class.getDeclaredField ("theAnswer");
get metodu
Objet tipinden sonuç döner. Doğru tipe örneğin Double, Int gibi cast etmek gerekir. Şöyle yaparız.
Foo foo = ...;
Field field = Foo.class.getDeclaredField( "theAnswer" );
field.setAccessable (true);
Object value = field.get (foo);
Eğer alan static ise sanırım şöyle yaparız.
Field field = ...;
Object value = field.get(null);
getAnnotations metodu
Şöyle yaparız.
for (Annotation annotation : field.getAnnotations()) {
...
}
set metodu
Örnek
Elimizde final alanı olan bir sınıf olsun
public class BasicHolder {

  private final static Integer VALUE = new Integer(0);
  ...
}
Bu alanı değiştirmek için şöyle yapaız.
private static void setStaticFieldValue(final Class obj, final String fieldName,
  final Object fieldValue) {
  try {
    final Field field = obj.getDeclaredField(fieldName);
    field.setAccessible(true);
    final Field modifiersField = Field.class.getDeclaredField("modifiers");
    modifiersField.setAccessible(true);
    modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL);
    field.set(null, fieldValue);
  } catch (NoSuchFieldException | IllegalAccessException e) {
    ...
  }
}
Çağırmak için şöyle yaparız.
 setStaticFieldValue(BasicHolder.class, "VALUE", i);
setAccessable metodu
Şöyle yaparız.
Field field = ...
field.setAccessible(true);

Hiç yorum yok:

Yorum Gönder