问答详情
源自:3-3 动态代理实现添加 InvocationHandler

只能使用infce.getSimpleName(),不能使用infce.getName()

http://www.imooc.com/qadetail/64474,有个相关的回答,但是不懂

我使用的是intellij idea,主要问题是获取类名字时我只能使用的是infce.getSimpleName(),而不能使用infce.getName(),看过生成的java文件,getName()是类全名(包括包名),但是会显示如下错误

C:\Users\Wind\IdeaProjects\DesignPatterns\out\production\DesignPatterns\Proxy\com\imooc\chapter3_1\$Proxy0.java:12: 错误: 找不到符号

  Method md = Proxy.com.imooc.chapter3_1.Moveable.class.getMethod("move");

                   ^

  符号:   类 com

  位置: 类 Proxy

for (Method m : infce.getMethods()) {
   methodStr += " @Override" + rt +
           "  public void " + m.getName() + "() {" + rt +
           "  try{" + rt +
           "  Method md = " + infce.getSimpleName() + ".class.getMethod(\""
           + m.getName() + "\");" + rt +
           "  invocationHandler.invoke(this,md);" + rt +
           "  }catch(Exception e){ e.printStackTrace();}" + rt +
           "  }";
}
String str =
       "package Proxy.com.imooc.chapter3_1;" + rt +
               "import java.lang.reflect.Method;" + rt +
               "public class $Proxy0 implements " + infce.getSimpleName() + " {" + rt +
               "  public $Proxy0(InvocationHandler invocationHandler) {" + rt +
               "     super();" + rt +
               "     this.invocationHandler = invocationHandler;" + rt +
               "  }" + rt +
               "  private InvocationHandler invocationHandler;" + rt +
               methodStr + rt +
               "}";
//产生代理类的java文件
String fileName = System.getProperty("user.dir") + "\\out\\production\\DesignPatterns\\Proxy\\com\\imooc\\chapter3_1\\$Proxy0.java";


提问者:windy_yong 2016-02-17 19:19

个回答

  • windy_yong
    2016-02-17 19:38:07

    再重新试了一下,两个其实都行,我之前出现不行的情况,是因为我的包名为Proxy.com.imooc.chapter3_1.XXX,然后包路径下同时有一个Proxy的类,所以可能导致了无法正确解析Proxy是一个包还是一个类,如果修改为正确的话那么两种方法都可以,

    从这里可以看出我们日常命名规范的一些重要性

    给出一个类似的例子:

    package proxy.com.imooc.test;

    /**
    * Created with IntelliJ IDEA.
    * @author Wind
    * @version V1.0
    * @Description: .
    * @Date 2016/2/17 19:34
    */
    public class Test {
       public static void main(String[] args) {
           new proxy.com.imooc.test.proxy();
       }
    }
    class proxy {

    }

    报错如下:

    C:\Users\Wind\IdeaProjects\DesignPatterns\src\proxy\com\imooc\test\Test.java

    Error:(12, 18) java: 找不到符号

      符号:   类 com

      位置: 类 proxy.com.imooc.test.proxy