2011-06-07 7 views
12

2 sınıfı nasıl karşılaştırabilirim? Java - Sınıfları karşılaştırmak?

class Sınıfım türü olmasına rağmen deyimi geçer asla eğer aşağıdaki:

public void(Class class) { 
    if (class == MyClass.class){ 

    } 
} 
+4

Diğer yandan, sadece sahte kodsa, diğer yandan derler. Asıl kodu yapıştırabilir misin? – Cristian

cevap

34
if (clazz.equals(MyClass.class)) { 

} 

BTW, sınıf ayrılmış bir sözcüktür.

+0

'klass' da yaygın bir var adıdır. – Soup

+1

'Son Sınıf SAN_DIEGO' –

9

clazz olmadığını test etmek MyClass bir (alt) tip Class.isAssignableFrom

için javadoc itibaren

MyClass.class.isAssignableFrom(clazz) 

yapmak olduğunu

Sınıf veya arabirimin temsil edilip edilmediğini belirler. Bu Sınıf nesnesi tarafından, belirtilen Sınıf parametresiyle temsil edilen sınıf veya arabirimin bir üst sınıfı veya üst yüzeyidir. Öyleyse doğru döner; aksi halde yanlış döndürür. Bu Class nesnesinin bir ilkel türü temsil ediyorsa, belirtilen Class parametresi tam olarak bu Class nesnesiyse bu yöntem true değerini döndürür; aksi halde yanlış döndürür.

Özel olarak, bu yöntem, belirtilen Sınıf parametresiyle temsil edilen türün, bu Sınıf nesnesinde temsil edilen türe, bir kimlik dönüştürmesi veya genişleyen bir referans dönüşümü aracılığıyla dönüştürülüp dönüştürülmeyeceğini sınar. Ayrıntılar için, bkz. Java Dil Özellikleri, bölüm 5.1.1 ve 5.1.4. Her String ayrıca Object ama

String.class.isAssignableFrom(Object.class) 

tüm Object s String ler çünkü yanlıştır

çünkü

Yani

Object.class.isAssignableFrom(String.class) 

doğrudur.


adı "isAssignableFrom"

Class1.class.isAssignableFrom(Class2.class) 

Yani, biz statik türüne sahip bir alan veya değişken atayabilirsiniz

Class1 x = (Class2) null; 

yasal yalnızca, gerçeği geliyor Class1,'dan gelen ve gelen bir ifadedir..

7

Class nesnelerini karşılaştırmak için == veya .equals() kullanabilirsiniz.

Örnek:

class MyClass 
{ 
    public static void main (String[] args) throws java.lang.Exception 
    { 
     MyClass m = new MyClass(); 
     if (MyClass.class == m.getClass()) 
     { 
      System.out.println("it worked"); 
     } 
    } 
} 

Demo: http://ideone.com/AwbNT

6

Bir örnek, belirli bir sınıfın ya da alt aitse kontrol etmek instanceof operatörünü kullanabilirsiniz.

class MyClass{} 

class SubClass extends MyClass{} 

public static void main(String args[]) { 

    SubClass object = new SubClass(); 

    if (object instanceof MyClass) { 
     System.out.println("It works, too"); 
    } 
}