为什么parameter.getType()isInstance(HttpServletRequest.class)的回报是假的,但用 “==” 是真
问题描述:
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);
}
}
输出为:为什么parameter.getType()isInstance(HttpServletRequest.class)的回报是假的,但用 “==” 是真
interface javax.servlet.http.HttpServletRequest
false
true
为什么要用 “isInstance” 是假的并使用“==”是真的? 因为“实例”无法判断实现关系吗?
答
isInstance等于}这种
此方法是Java语言的instanceof 操作者的动态等效。
该方法返回false,因为你是比较一个类到另一个类HttpServletRequest.class采用这个方法(通过p.getType()返回)希望有一个实例,例如:
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)
等于运算因为这两个类是相等的
p.getType() == HttpServletRequest.class // true
HttpServletRequest.class == HttpServletRequest.class // true
返回true,如果你想实现法官必须使用方法
关系isAssignableFrom(Class<?> cls)
确定是否此Class对象所表示的类 或接口或者是相同,或 是超类或超接口的,类或接口 由指定的类的参数来表示。如果是的话,它返回true; 否则返回false。如果此Class对象表示一个 基元类型,则此方法返回true,如果指定的类 参数恰好是此Class对象;否则返回false。