从制造到创造
软件工程师成长之路
posts - 292,  comments - 96,  trackbacks - 0
在反射机制中,Class.forName(className).newInstance();
如果你想通过反射机制得到当前包的某个类的实例,传入类名的同时必须传入包名。

例如在包com.coderdream下有两个类Shape,ShapeFactory,如果你想在ShapeFactory中的某个方法中用反射的方法生成Shape类,那么如果直接使用:
    Class.forName("Shape").newInstance();
会抛出找不到类的异常,因为确实没有Shape类,而只有com.coderdream.Shape类。

但是我们传参数时一般只会传不带包的类名,那么我们可以这样处理:
    String packageName = new ShapeFactory().getClass().getPackage().getName();
    
return (Shape) Class.forName(packageName + "." + className).newInstance();
其中    new ShapeFactory().getClass().getPackage().getName() 会得到包名“com.coderdream”,我们只要加上“.”和类名就没有问题了。

posted on 2007-11-23 15:34 CoderDream 阅读(6343) 评论(2)  编辑  收藏 所属分类: 经验点滴

FeedBack:
# re: 反射应用经验:得到当前类的包名
2012-04-09 15:55 | 游客
String packageName = new ShapeFactory().getClass().getPackage().getName();
可以改为
String packageName = this.getClass().getPackage().getName();

可以减少一次new  回复  更多评论
  
# re: 反射应用经验:得到当前类的包名[未登录]
2013-03-21 12:22 | test
厉害 ,谢谢你 感激。  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航:
 

<2007年11月>
28293031123
45678910
11121314151617
18192021222324
2526272829301
2345678

常用链接

留言簿(9)

我参与的团队

随笔分类(245)

随笔档案(239)

文章分类(3)

文章档案(3)

收藏夹(576)

友情链接

搜索

  •  

积分与排名

  • 积分 - 456226
  • 排名 - 114

最新评论

阅读排行榜

评论排行榜