只能使用infce.getSimpleName(),不能使用infce.getName()
http://www.xianlaiwan.cn/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";
2016-02-17
再重新試了一下,兩個其實都行,我之前出現不行的情況,是因為我的包名為Proxy.com.imooc.chapter3_1.XXX,然后包路徑下同時有一個Proxy的類,所以可能導致了無法正確解析Proxy是一個包還是一個類,如果修改為正確的話那么兩種方法都可以,
從這里可以看出我們日常命名規范的一些重要性
給出一個類似的例子:
報錯如下:
C:\Users\Wind\IdeaProjects\DesignPatterns\src\proxy\com\imooc\test\Test.java
Error:(12, 18) java: 找不到符號
? 符號: ? 類 com
? 位置: 類 proxy.com.imooc.test.proxy