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

  • Bennythecoder

    Bennythecode

    25 Mart 2008
  • MusicDeluxeTV

    MusicDeluxeT

    14 Mayıs 2010
  • tychoadragmire

    tychoadragmi

    20 Mart 2006