SORU
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ş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Ciaran Blumenfeld

    Ciaran Blume

    20 NİSAN 2009
  • eisleyhead

    eisleyhead

    11 Ocak 2006
  • Tianna Sierra Dance

    Tianna Sierr

    16 EYLÜL 2013