Giriş
Şu satırı dahil ederiz.
Bir MethodHandles.Lookup nesnesi döndürür.
Örnek
Şöyle yaparız.
Elimizde Foo ata sınıfı olsun.
Şu satırı dahil ederiz.
import java.lang.reflect.Method;
import java.lang.invoke.*;
arrayElementVarHandle metodu
öyle yaparız
VarHandle arrayVarHandle = MethodHandles.arrayElementVarHandle(int[].class);
lookup metodu
Örnek
Şöyle yaparız.
MethodHandles.Lookup lookup = MethodHandles.lookup();
in Kullanımı
Örnek - findVarHandle
Şöyle yaparız
VarHandle PUBLIC_TEST_VARIABLE = MethodHandles
.lookup()
.in(VariableHandlesUnitTest.class) // Class name
.findVarHandle(VariableHandlesUnitTest.class, // Class name
"publicTestVariable", // Variable name
int.class // Variable type
);
privateLookupIn
Örnek - findVarHandle
Şöyle yaparız
VarHandle PRIVATE_TEST_VARIABLE = MethodHandles .privateLookupIn(VariableHandlesUnitTest.class, MethodHandles.lookup()) .findVarHandle(VariableHandlesUnitTest.class, "privateTestVariable", int.class);
unreflectSpecial Kullanımı
ÖrnekElimizde Foo ata sınıfı olsun.
public class Foo {
public void doit() {
System.out.println("good");
}
}
Bu sınıftan kalıtan Bar sınıfı olsunpublic class Bar extends Foo {
public void doit() {
System.out.println("bad");
}
}
Foo sınıfının doIt () metoduna erişmek için şöyle yaparız.Bar b = new Bar();
Method m = Foo.class.getDeclaredMethod("doit", new Class[]{});
MethodHandle h = MethodHandles.lookup().unreflectSpecial(m, Bar.class);
h.invoke(b);
Hiç yorum yok:
Yorum Gönder