16 EKİM 2010, CUMARTESİ
java: Sınıf.isİnstance vs Sınıf.isAssignableFrom
clazz
Class
biraz olsun ve obj
Object
.
clazz.isAssignableFrom(obj.getClass())
her zaman olduğu gibi
clazz.isInstance(obj)
?
Farkları nelerdir?
CEVAP
8 AĞUSTOS 2011, PAZARTESİ
Her iki cevap da kapsıyor ama ne tam bir cevaptır.
MyClass.class.isInstance(obj)
örnek kontrol eder. Parametre n olmayan boş ise true değerini döndürür ve ClassCastException
bir yükseltme olmadan MyClass
çevirebilirsiniz. Diğer bir deyişle, n MyClass
veya onun alt sınıflarından bir örneğidir.
MyClass.class.isAssignableFrom(Other.class)
MyClass
aynı veya bir üst sınıf ise true döndürür ya da, Other
superinterface. Other
bir sınıf veya arabirim olabilir. Other
MyClass
dönüştürülebilir eğer doğru cevaplar.
Küçük bir kod göstermek için:
public class NewMain
{
public static void main(String[] args)
{
NewMain nm = new NewMain();
nm.doit();
}
public void doit()
{
A myA = new A();
B myB = new B();
A[] aArr = new A[0];
B[] bArr = new B[0];
System.out.println("b instanceof a: " (myB instanceof A));
System.out.println("b isInstance a: " A.class.isInstance(myB));
System.out.println("a isInstance b: " B.class.isInstance(myA));
System.out.println("b isAssignableFrom a: " A.class.isAssignableFrom(B.class));
System.out.println("a isAssignableFrom b: " B.class.isAssignableFrom(A.class));
System.out.println("bArr isInstance A: " A.class.isInstance(bArr));
System.out.println("bArr isInstance aArr: " aArr.getClass().isInstance(bArr));
System.out.println("bArr isAssignableFrom aArr: " aArr.getClass().isAssignableFrom(bArr.getClass()));
}
class A
{
}
class B extends A
{
}
}
Ve çıktı:
b instanceof a: true
b isInstance a: true
a isInstance b: false
b isAssignableFrom a: true
a isAssignableFrom b: false
bArr isInstance A: false
bArr isInstance aArr: true
bArr isAssignableFrom aArr: true
Bunu Paylaş:
Java iç sınıf ve statik iç içe sınıf...
Java sınıf yolu içinde birden fazla ka...
Nasıl&; derleme quot&; Java sınıf dosy...
Neden Java statik olarak bir sınıf bil...
Ne örneğin ve Sınıf arasındaki farktır...