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);
}
}
输出是:
interface javax.servlet.http.HttpServletRequest
false
true
为什么要使用&#34; isInstance&#34;是假的,使用&#34; ==&#34;是真的? 因为&#34;&#34;的实例不能判断实施关系吗?
答案 0 :(得分:7)
该类型不是HttpServletRequest
类的实例,它是java.lang.Class
的一个实例,其中包含有关HttpServletRequest
类的信息。
答案 1 :(得分:5)
isInstance等于instanceOf
此方法是Java语言instanceof的动态等价物 操作
该方法返回false,因为您正在将一个类(由p.getType()返回)与另一个类HttpServletRequest.class进行比较,而该方法需要一个实例,例如:
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)
equals运算符返回true,因为两个类是相等的
p.getType() == HttpServletRequest.class // true
HttpServletRequest.class == HttpServletRequest.class // true
如果你想要判断实现关系,你必须使用方法
isAssignableFrom(Class<?> cls)
确定是否上课 或此Class对象表示的接口或者相同, 或者是类或接口的超类或超接口 由指定的Class参数表示。如果是这样,它返回true; 否则返回false。如果这个Class对象代表一个 原始类型,如果指定的Class,此方法返回true 参数恰好是这个Class对象;否则返回false。