2013-02-13 18 views
7

Piszę metodę, chciałbym przekazać klasę do metody, gdzie część kodu obejmuje sprawdzanie, czy obiekt jest określonego typu. To jest to, czego chcę (ale które oczywiście nie działa):Przekazywanie klasy jako argument do metody w java

private static class MyClass1 { /***/ } 
private static class MyClass2 { /***/ } 

private void someFunc() { 
    /* some code */ 
    methodName(MyClass1); 
    methodName(MyClass2); 
} 


private void methodName(Class myClass) { 
    Object obj; 
    /* Complicated code to find obj in datastructure */ 
    if (obj instanceof myClass) { 
     /* Do stuff */ 
    } 
} 

Jakieś wskazówki, jak to zrobić? Dzięki!

Odpowiedz

19

Class ma zarówno metodę isInstance(), jak i metodę sprawdzania takich rzeczy w postaci isAssignableFrom(). Najbliżej czego szukasz:

if (myClass.isInstance(obj)) { 

Aktualizacja: Z Twojego komentarza, chcesz przekazać nazwę klasy do metody i sprawdzić czy coś jest przypisane do tej klasy. Jedynym sposobem na to jest przekazanie nazwy klasy jako String, a następnie załadowanie klasy i użycie jednej z wyżej wymienionych metod. (Na przykład obsługę wyjątków pominięta):

private void methodName(String className) { 
    Class myClass = Class.forName(className); 
    Object obj; 
    /* Complicated code to find obj in datastructure */ 
    if (myClass.isInstance(obj)) { 
        /* Do stuff */ 
    } 
} 
+0

Nie wierzę sformułowałem moje pytanie wystarczająco jasne - Problem polega na tym, że chcę, aby móc korzystać z instancją, czyli ja chcę, aby "Klasa", którą przechodziłem, była nazwą klasy. – tor

+1

Zaktualizowano. Czy to jest bliższe temu, czego szukasz? –

2

Myślę, że chcesz wiedzieć klasy typu obiektu w czasie wykonywania .. więc używać Reflaction api za to. i na to rozwiązanie problemu myślę praca

public class Clazz { 
public static void main(String[] args) { 
    Clazz clazz = new Clazz(); 
    ArrayList list = new ArrayList<>(); 
    Class myClass = list.getClass(); 
    clazz.display(myClass); 
} 

/** 
* Modified By nirav.modi on Feb 13, 2013 
*/ 
private void display(Class myClass) { 
    ArrayList list = new ArrayList<>(); 
    if(myClass.isInstance(list)) { 
     System.out.println("Yooo , its instance.."); 
    }else { 
     System.out.println("Not instance"); 
    } 
} 

}

0
MyClass1 myClass1 = new MyClass1(); 
if(MyClass1.class.isInstance(myClass1)) 
    System.out.println("(MyClass1.class.isInstance(myClass1) is TRUE"); 
else 
    System.out.println("(MyClass1.class.isInstance(myClass1) is FALSE"); 

Object myClass2 = new MyClass2(); 
Class class1 = myClass1.getClass(); 
Class class2 = myClass2.getClass(); 
System.out.println("class1 == class2 : " + (class1 == class2)); 
System.out.println("class1.isAssignableFrom(class2) = " 
    + class1.isAssignableFrom(class2)); 

MyClass1 myClass3 = new MyClass1(); 
Class class3 = myClass3.getClass(); 
System.out.println("class1 == class3 : " + (class1 == class3)); 
System.out.println("class1.isAssignableFrom(class3) = " 
    + class1.isAssignableFrom(class3)); 

OUPUT: 

(MyClass1.class.isInstance(myClass1) is TRUE 
class1 == class2 : false 
class1.isAssignableFrom(class2) = false 
class1 == class3 : true 
class1.isAssignableFrom(class3) = true 
+1

Nice One Sunil ... –

Powiązane problemy