这里报的异常是NoSuchMethodException所以跟泛型没关系,是getMethod方法报出的异常,模拟代码如下:
- public class Demo9 {
- public static void main(String[] args) {
- Dog d = new Dog();
- // 错误代码示例
- try {
- d.getClass().getMethod("eat", String.class);
- } catch (NoSuchMethodException e) {
- System.out.println("找不到方法");// 会运行此句
- } catch (SecurityException e) {
- System.out.println("其他异常");
- } // 运行结果为打印找不到方法,这个异常是getMethod()方法抛出的,跟泛型没有关系,
- // 报此异常的原因是getMehod方法会严格按照定义方法时的方法签名找方法此例中Dog类只定义了Object参数的eat方法,
- // 故找不到String参数的eat方法
- // 相反,如果运行明确定义过的getMethod("eat", Object.class).invoke(d, "肉")就不会出现异常
- try {
- d.getClass().getMethod("eat", Object.class).invoke(d, "肉");//会打印吃肉
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
- class Dog {
- public void eat(Object str) {
- System.out.println("吃" + str);
- }
- //public void eat(String obj){
- //}如果加上这个方法则上述就不会出现异常了
- }
复制代码 |