constructor
Şöyle yaparız.
İmzası şöyle.
Normalde sınıfın Class tipi şöyledir.
Örnek
Elimizde şöyle bir hiyeraşi olsun
Şöyle yaparız.
Generic kodlarda kullanılır. Verilen nesneyi downcast yani kalıtan sınıfa çevirir.
Örnek
Şöyle yaparız.
Elimizde şöyle bir kod olsun.
Paket + Sınıf İsmi verilir. Şöyle yaparız.
Eğer String[] varsa Class<String> döner.
Örnek
Şöyle yaparız.
Açıklaması şöyle.
Inner sınıfları verir.
Örnek
Şöyle yaparız.
Elimizde şöyle bir kod olsun.
Parametre almayan constructor için şöyle yaparız.
Tüm constructor'ları verir. Şöyle yaparız.
Açıklaması şöyle. Sınıf tarafından tanımlanmış, kalıtımla gelmeyen tüm alanları (public+ protected + private dahil) verir.
Method Sınıfı yazısına taşıdım.
getDeclaredMethod metodu
Method Sınıfı yazısına taşıdım.
getEnclosingClass metodu
Bir sınıfın sarmaladığı sınıfı döner.
Örnek
Elimizde Array tabanlı bir liste olsun.
Şöyle yaparız
getMethod metodu
Açıklaması şöyle.
Açıklaması şöyle.
Şöyle yaparız.
Sınıfın paket ismi dahil tüm ismini döner. Elimizde şu kod olsun
getSimpleName metodu
Sadece sınıfın ismini verir.
Örnek
Şöyle yaparız. Çıktı olarak örneğin "Foo" alırız.
Sınıfın atasını döner.
Class İle Anotasyonlara Erişmek yazısına taşıdım.
isAnonymous metodu
Sınıfın anonim olup olmadığını döner.
Şöyle yaparız.
İlk nesnenin parametre olarak verilen nesnenin atası olup olmadığını döner.
Örnek
Şöyle yaparız.
Örneğin Comparable arayüzü String sınıfının atasıdır.
Sınıfın enum olup olmadığını döner.
isInstance metodu yazısına taşıdım.
newInstance metodu - Parameterless
Sınıfın default constructor metodunun olması gerekir yoksa
Not 1
- JDK Serialization default constructor'ı çağırmaz. XStream Enhanced Mode'da çalışıyorsa da çağırmaz.
Örnek
Şöyle yaparız
Şöyle yaparız.
Default Constructor yoksa doğru contructor metodunu bulup, doğru parametrelerle çağırmak gerekir.
Doğru constructor metodunu bulmak için şu yöntemlerden birisi seçileblir.
Çözüm 1
getConstructor(..) çağrısı ile bir constructor metodu bulunur sınıf yaratılabilir.
Çözüm 2
- Ya da getDeclaredConsructor() çağrısı ile şöyle yaparız.
Apache Commons projesindeki ConstructorUtils.getMatchingAccessibleConstructor() metodu kullanılır
Şöyle yaparız.
Class<?> c = Class.forName("...");
Şöyle yaparız.Class<Foo> c = Foo.class;
asSubclass metoduİmzası şöyle.
public <U> Class<? extends U> asSubclass(Class<U> clazz)
Verilen impl nesnesinden ata sınıftan kalıttığını belirten Class nesnesini döndürür.Normalde sınıfın Class tipi şöyledir.
AbstractList<String> ls = new ArrayList<>();
Class<? extends AbstractList> clazz = ls.getClass();
Eğer ben bunuClass<? extends Foo> clazz = ...
haline getirmek istersem asSubClass() metodunu kullanırım.Örnek
Elimizde şöyle bir hiyeraşi olsun
Foo <- Bar
Şöyle yaparız.Class<? extends Foo> clazz = bar.asSubclass(Foo.class);
ÖrnekŞöyle yaparız.
final Class<? extends Xyz> clazz = resultClass.asSubclass(Xyz.class);
cast metoduGeneric kodlarda kullanılır. Verilen nesneyi downcast yani kalıtan sınıfa çevirir.
Örnek
Şöyle yaparız.
<T> T doSomething(Class<T> cls) {
Object o;
// snip
return cls.cast(o);
}
ÖrnekElimizde şöyle bir kod olsun.
Collection<?> filerCollection = ...;
Class<T> classType = ...;
Şöyle yaparız.return filter.stream()
.filter(classType::isInstance) // only keep elements of type T
.map(classType::cast) // safely cast from Object to T
.collect(Collectors.toList()); // collect into a List<T>
forName metoduPaket + Sınıf İsmi verilir. Şöyle yaparız.
Class<?> c = Class.forName("...");
getComponentType metoduEğer String[] varsa Class<String> döner.
Örnek
Şöyle yaparız.
Integer[] ar = new Integer[1];
Class<?> componentType = ar.getClass().getComponentType();
getConstructor metoduAçıklaması şöyle.
Şöyle yaparız.Returns a Constructor object that reflects the specified public constructor of the class represented by this Class object. The parameterTypes parameter is an array of Class objects that identify the constructor's formal parameter types, in declared order. If this Class object represents an inner class declared in a non-static context, the formal parameter types include the explicit enclosing instance as the first parameter.
Class<MyClass> c;
// ...
Constructor<MyClass> constructor = c.getConstructor(String.class);
MyClass instance = constructor.newInstance("...");
getDeclaredClasses metoduInner sınıfları verir.
Örnek
Şöyle yaparız.
Class<MyClass> c;
Class[] innerClass = c.getDeclaredClasses();
ÖrnekElimizde şöyle bir kod olsun.
public class A {
private class B
{
}
private final B b = new B();
public static void main(String[] args) {
Class<?> bClass = A.class.getDeclaredClasses()[0];
Constructor<?>[] declaredConstructors = bClass.getDeclaredConstructors();
System.out.println(declaredConstructors.length); //result = 2
}
}
Şöyle yaparız.public static void main(String[] args) {
Class<?> bClass = A.class.getDeclaredClasses()[0];
Constructor<?>[] declaredConstructors = bClass.getDeclaredConstructors();
System.out.println(declaredConstructors.length);
}
getDeclaredConstructor metoduParametre almayan constructor için şöyle yaparız.
Class<MyClass> c;
Constructor constructor = c.getDeclaredConstructor();
Tek parametre alan constructor için şöyle yaparız.Constructor constructor = c.getDeclaredConstructor(String.class);
Çok parametreli constructor için şöyle yaparız.Class[] cArg = new Class[3]; //Our constructor has 3 arguments
cArg[0] = Long.class; //First argument is of *object* type Long
cArg[1] = String.class; //Second argument is of *object* type String
cArg[2] = int.class; //Third argument is of *primitive* type int
Constructor constructor = c.getDeclaredConstructor(cArg);
getDeclaredConstructors metoduTüm constructor'ları verir. Şöyle yaparız.
Class<MyClass> c;
Constructor constructor
= c.getDeclaredConstructors()[0];
getDeclaredFields metodu - Kalıtımla Gelmeyen Tüm AlanlarAçıklaması şöyle. Sınıf tarafından tanımlanmış, kalıtımla gelmeyen tüm alanları (public+ protected + private dahil) verir.
Şöyle yaparız.Returns an array of Field objects reflecting all the fields declared by the class or interface represented by this Class object. This includes public, protected, default (package) access, and private fields, but excludes inherited fields. The elements in the array returned are not sorted and are not in any particular order. This method returns an array of length 0 if the class or interface declares no fields, or if this Class object represents a primitive type, an array class, or void.
// Get all the field of the class
Field[] fields = Foo.class.getDeclaredFields();
getDeclaredMethods metoduMethod Sınıfı yazısına taşıdım.
getDeclaredMethod metodu
Method Sınıfı yazısına taşıdım.
getEnclosingClass metodu
Bir sınıfın sarmaladığı sınıfı döner.
Örnek
Elimizde Array tabanlı bir liste olsun.
List<String> list = Arrays.asList(array);
Şöyle yaparız.static <T> boolean wasListProducedAsAResultOfCallingTheFunctionArrays_asList(List<T> l) {
return Arrays.class.equals(l.getClass().getEnclosingClass());
}
getFields metodu - Tanımlanan ve Kalıtımla Gelen Public AlanlarŞöyle yaparız
// returns inherited members but not private members.
Field[] fields = ClassName.class.getFields();
// returns all members including private members but not inherited members.
Field[] fields = ClassName.class.getDeclaredFields();
getMethod metodu
Açıklaması şöyle.
getModifiers metoduTo find a matching method in a class C: If C declares exactly one public method with the specified name and exactly the same formal parameter types, that is the method reflected. If more than one such method is found in C, and one of these methods has a return type that is more specific than any of the others, that method is reflected; otherwise one of the methods is chosen arbitrarily.
Açıklaması şöyle.
int java.lang.Class.getModifiers()Returns the Java language modifiers for this class or interface, encoded in an integer. The modifiers consist of the Java Virtual Machine's constants for public, protected, private, final, static, abstract and interface; they should be decoded using the methods of class Modifier.If the underlying class is an array class, then its public, private and protected modifiers are the same as those of its component type. If this Class represents a primitive type or void, its public modifier is always true, and its protected and private modifiers are always false. If this object represents an array class, a primitive type or void, then its final modifier is always true and its interface modifier is always false. The values of its other modifiers are not determined by this specification.The modifier encodings are defined in The Java Virtual Machine Specification, table 4.1.
System.out.println(Modifier.isAbstract(byte[].class.getModifiers()));
getName metoduSınıfın paket ismi dahil tüm ismini döner. Elimizde şu kod olsun
class A {
private int a = 1;
public int getA() {
if (getClass().equals(A.class) ||
getClass().getSuperclass().getName()
.equals(A.class.getName())) {
return a;
} else {
throw new IllegalStateException("hahaha");
}
}
}
class B extends A {}
class C extends B {}
getA() metodu sadece A ve B için çalışır. C için exception fırlatır. Şöyle yaparız.A a = new A();
B b = new B();
C c = new C();
System.out.println(a.getA());
System.out.println(b.getA());
System.out.println(c.getA());
Çıktı olarak şunu alırız.1
1
Exception in thread "main" java.lang.IllegalStateException: hahaha
getProtectionDomain metodu
ProtectionDomain nesnesi döner.
getResource metodu
Class İle Resource Yüklemek yazısına taşıdım.
getResourceAsStream metodu
Class İle Resource Yüklemek yazısına taşıdım.
ProtectionDomain nesnesi döner.
getResource metodu
Class İle Resource Yüklemek yazısına taşıdım.
getResourceAsStream metodu
Class İle Resource Yüklemek yazısına taşıdım.
Sadece sınıfın ismini verir.
Örnek
Şöyle yaparız. Çıktı olarak örneğin "Foo" alırız.
c.getSimpleName()
getSuperClass metoduSınıfın atasını döner.
Class c =...;
c = c
.getSuperclass();
isAnnotationPresent metoduClass İle Anotasyonlara Erişmek yazısına taşıdım.
isAnonymous metodu
Sınıfın anonim olup olmadığını döner.
Class c = ...;
if c.isAnonymousClass()) {...}
isArray metoduŞöyle yaparız.
boolean isArrayOrCollection = Collection.class.isAssignableFrom(fooClass) ||
fooClass.isArray();
isAssignableFrom metoduİlk nesnenin parametre olarak verilen nesnenin atası olup olmadığını döner.
Örnek
Şöyle yaparız.
Class<?> fooClass = foo.getClass();
boolean isArrayOrCollection = Collection.class.isAssignableFrom(fooClass) ||
Object[].class.isAssignableFrom(fooClass);
ÖrnekÖrneğin Comparable arayüzü String sınıfının atasıdır.
Comparable.class.isAssignableFrom (String.class)
isEnum metoduSınıfın enum olup olmadığını döner.
Class c = ...;
if c
.isEnum() {...}
isInstance metoduisInstance metodu yazısına taşıdım.
newInstance metodu - Parameterless
Sınıfın default constructor metodunun olması gerekir yoksa
java.lang.InstantiationException:
alırız. Açıklaması şöyle.InstantiationException - if this Class represents an abstract class, an interface, an array class, a primitive type, or void; or if the class has no nullary constructor; or if the instantiation fails for some other reason.
- JDK Serialization default constructor'ı çağırmaz. XStream Enhanced Mode'da çalışıyorsa da çağırmaz.
Örnek
Şöyle yaparız
Class c = Class.forName("com.foo.Bar");
Bar bar = (Bar)c.newInstance();
ÖrnekŞöyle yaparız.
MyClass foo = (MyClass)c.newInstance();
newInstance metodu - ParametreyleDefault Constructor yoksa doğru contructor metodunu bulup, doğru parametrelerle çağırmak gerekir.
Doğru constructor metodunu bulmak için şu yöntemlerden birisi seçileblir.
Çözüm 1
getConstructor(..) çağrısı ile bir constructor metodu bulunur sınıf yaratılabilir.
Çözüm 2
- Ya da getDeclaredConsructor() çağrısı ile şöyle yaparız.
clazz.getDeclaredConstructor (String.class).newInstance("...");
Çözüm 3Apache Commons projesindeki ConstructorUtils.getMatchingAccessibleConstructor() metodu kullanılır
Hiç yorum yok:
Yorum Gönder