java反射getDeclaredMethod()方法求解

图片观看:测试代码:publicstaticvoidmain(String[]args)throwsException{Methodtarget1=newDate().g... 图片观看:

测试代码:
public static void main(String[] args) throws Exception {
Method target1 = new Date().getClass().getDeclaredMethod("setYear",int.class);
System.out.println(target1);

Method target2 = new Date().getClass().getDeclaredMethod("setYear",Integer.class);
System.out.println(target1);
}

在编写一个工具类时,定义了一个获取Method的方法,我使用的是target2的形式,在测试时遇到的问题。
我就很奇怪:为什么使用Integer.class参数,出现无法找到异常。
而使用int.class可以。说明Integer.class与int.class不等价。
但是为什么??
求解
展开
 我来答
历盆郁7
2014-07-26 · TA获得超过4277个赞
知道大有可为答主
回答量:1795
采纳率:100%
帮助的人:954万
展开全部

抛出的异常是:

java.lang.NoSuchMethodException: java.util.Date.setYear(java.lang.Integer)

找不到方法

你看下Date的源代码

    public void setYear(int year) {
        getCalendarDate().setNormalizedYear(year + 1900);
    }

参数是int类型,不是Integer类型

int是基础类型,Integer是他的封装类,是个对象,这个类提供很多方法.不严格意义上说,你可以理解为是int的工具类

更多追问追答
追问

int与Integer不是会自动装箱与拆箱吗。

其他不是等价的吗?


获取Class对象的3种方法:

  1. 类名.class

  2. 对象名.class

  3. Class类提供的静态方法forName(String className)

而int.class说明是第一种。

但是int是一个类吗?

追答
int不是类,class可以理解是他的属性,
就像数组一样,有length属性
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式