2016-06-10 16 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); 
    } 
} 

đầu ra là:tại sao parameter.getType() isinstance (HttpServletRequest.class) trở lại là sai, nhưng sử dụng "==" là đúng

interface javax.servlet.http.HttpServletRequest 
false 
true 

tại sao sử dụng "isinstance" là sai và sử dụng "==" là đúng? vì "trường hợp" không thể đánh giá mối quan hệ thực hiện?

Trả lời

5

isinstance bằng instanceof

Phương pháp này là tương đương với năng động của ngôn ngữ Java instanceof điều hành.

Phương pháp này trả về false vì bạn đang so sánh một lớp (được trả về bởi p.getType()) đến lớp khác HttpServletRequest.class thay vì phương pháp này muốn một thể hiện ví dụ:

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) 

Các bằng hành trả về true vì lớp hai đều bình đẳng

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

nếu bạn muốn thẩm phán thực hiện mối quan hệ bạn phải sử dụng phương pháp

isAssignableFrom(Class<?> cls) 

Xác định nếu lớp hoặc giao diện được đại diện bởi đối tượng Class này là một trong hai giống như, hoặc là một lớp cha hoặc superinterface của, lớp hoặc giao diện đại diện bởi các tham số lớp nhất định. Nó trả về đúng nếu như vậy; nếu không sẽ trả về false. Nếu đối tượng Class này đại diện cho một loại nguyên thủy , phương thức này trả về true nếu tham số Class được chỉ định chính xác là đối tượng Class này; nếu không nó sẽ trả về sai.

7

Loại không phải là một phiên bản của lớp HttpServletRequest, đây là phiên bản của java.lang.Class chứa thông tin về lớp HttpServletRequest.

Các vấn đề liên quan