2016-06-10 23 views
5
Parameter[] ps = method.getParameters(); 

Map<String,Integer> map = new HashMap<String,Integer>(); 

for(int ij = 0;ij<ps.length;ij++){ 

    Parameter p = ps[ij]; 

    RequestParam rp = p.getAnnotation(RequestParam.class); 

    if(rp != null){ 

     //do something 

    }else { 
     System.out.println(p.getType()); 
     System.out.println(p.getType().isInstance(HttpServletRequest.class)); 
     System.out.println(p.getType() == HttpServletRequest.class); 
    } 
} 

der Ausgang ist:warum parameter.getType() isinstance (HttpServletRequest.class) return ist falsch, aber verwenden "==" true ist

interface javax.servlet.http.HttpServletRequest 
false 
true 

warum die "isinstance" verwenden, ist falsch und benutze "==" ist wahr? weil die "Instanz von" kann die Beziehung zwischen den Geräten nicht beurteilen?

Antwort

5

isinstance gleich instanceOf

Dieses Verfahren der dynamischen Äquivalent der Sprache Java Instanceof Operator ist.

Die Methode false zurück, weil Sie eine Klasse vergleichen (von p.getType() zurückgegeben wird) in eine andere Klasse HttpServletRequest.class stattdessen diese Methode soll eine Instanz zum Beispiel:

Dog bobby = new BobbyDog(); // class BobbyDog extends Dog 
System.out.println(Dog.class.isInstance(bobby)); // correct use (return true) 
System.out.println(Dog.class.isInstance(BobbyDog.class)); // incorrect use (return false) 

Der Gleichheitsoperator return true, weil die beiden Klasse

p.getType() == HttpServletRequest.class // true 
HttpServletRequest.class == HttpServletRequest.class // true 

gleich sind, wenn Sie wollen Richter Beziehung implementiert die Methode

verwenden müssen
isAssignableFrom(Class<?> cls) 

Bestimmt, ob die Klasse oder die Schnittstelle von dieser Klasse Objekt dargestellt ist entweder gleich, oder ist eine Superklasse oder Superschnitt von der Klasse oder Schnittstelle durch die angegebene Klasse Parameter dargestellt. Es gibt wahr zurück, wenn dies der Fall ist. andernfalls gibt es false zurück. Wenn dieses Klassenobjekt einen primitiven Typ darstellt, gibt diese Methode true zurück, wenn der angegebene Parameter der Klasse genau dieses Klassenobjekt ist. Andernfalls wird false zurückgegeben.

7

Der Typ ist keine Instanz der Klasse HttpServletRequest, sondern eine Instanz von java.lang.Class, die Informationen zur HttpServletRequest-Klasse enthält.