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){ // ... }else { System.out.println(); System.out.println(p.getType()); System.out.println(p.getType().isInstance(HttpServletRequest.class)); System.out.println(p.getType() == HttpServletRequest.class); System.out.println(); } }
输出的:
interface javax.servlet.http.HttpServletRequest false true
为什么isInstance返回的是false,而==返回true?
从输出来看他们的类型是完全相同的。难道是因为HttpServletRequest是个interface?而instance of 不能作用于接口?但是在jdk1.8的api文档(java.lang.Class<T>.isInstance())的介绍中有一句话: If this Class
object represents an interface, this method returns true
if the class or any superclass of the specified Object
argument implements this interface; it returns false
otherwise.更加疑惑不解,求大家帮忙。
isInstance 不是用来检测实例的么。
Class类的isInstance(Object obj)方法,obj是被测试的对象,如果obj是调用这个方法的class或接口 的实例,则返回true。这个方法是instanceof运算符的动态等价。
形象地:自身类.class.isInstance(自身实例或子类实例) 返回true
例:String s=new String("javaisland");
System.out.println(String.class.isInstance(s)); //true
isInstance 好像是检查对象是否相等的吧 ==比较的是值
p对象是Parameter类的实例,isInstance判断成true,说明Parameter肯定是HttpServletRequest的子类。
最好 把倒入的头包给贴出来,不然这些对象 谁知道是什么。