2012-04-04 11 views
1

Ich habe die folgende Methode:Wie überprüft man den Typ der Param-Klasse?

public static String getServiceUri(Class<?> c) { 

// I'd like to check which type the parameter is... 
if(c.getClass().equals(MyClass.class)){ 
    do stuff 1 
} else { 
    do stuff 2 
} 
} 

Invoke-Methode: getServiceUri(MyClass.class);

Auf getServiceUri möchte ich einen WebService von der Art eines ServiceClass basierend nennen.

Ich weiß, dass Gleichgestellte Objekte Instanz vergleichen wird, aber in diesem Fall versuche ich den Objekttyp zu entdecken.

Wer weiß, wie ich mit dieser Art von Ansatz vergleichen kann?

Antwort

7
instanceof operator is the best choice.. 

Sie können

if(c instanceof MyClass){ 
//do your stuff 

} 
+2

instaceof tun ist viel besser als passende Klassen wie der Fragesteller tut. instanceof berücksichtigt Vererbung. – Snicolas

+0

@Snicolas .. sehr wahr .. – ngesh

+1

Ich wünsche SO erlaubt Ihnen, einen Brief Fixes wie das Kapital O in instanceOf oben zu machen. – rob5408

0
public static String getServiceUri(Class<?> classParam) { 

    if(classParam instanceof MyClass){ 

    } 
} 

wie diese etwas tun, das ist falsch. Es kompiliert nicht sogar, weil classParam eine tatsächliche Instanz (Objekt) sein muss, um den instanceof-Operator zu verwenden: daher der Name.

Wenn Sie wollen wissen, ob die classParam genau gleich MyClass.class ist:

public static String getServiceUri(Class<?> c) { 

    if(classParam == MyClass.class){ 
    } 
} 

Wenn Sie jedoch die gesamte Hierarchie von classParam gegen MyClass überprüfen möchten, dann können Sie classParam.isAssignableFrom(MyClass.class)

Verwandte Themen