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

  • A Alkhaldi

    A Alkhaldi

    12 Mayıs 2007
  • Kyler Briskey

    Kyler Briske

    20 ŞUBAT 2011
  • Official Clouds

    Official Clo

    1 HAZİRAN 2011