求教:java中如何利用反射创建变量?

sillf 2010-06-22 10:03:34
java中可以通过一个字符串找到一个类并为这个类创建实例,但是这个实例用什么东西来接收呢?
比如一个字符串

String str="java.lang.Math";

Class cl=Class.forName(str);

cl.newInstance();//此处创建了实例,但是在没有确定返回类型的情况下,如何通过反射产生一个变量指针来接收这个实例呢?显然用
Math m=(Math)cl.newInstance();是缺乏移植性的,求教各位知道答案的大虾指点下
...全文
287 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
sillf 2010-06-23
  • 打赏
  • 举报
回复
恩 楼上两位分析的很有道理,即便接收了也没有实际意义,看来可以结贴了。
CoderPlusPlus 2010-06-23
  • 打赏
  • 举报
回复
用Object接收

既然是动态生成的,那接下来使用这个对象的时候也不可能硬编码地调用它的方法,所以要求接收这个对象的引用是它的实际类型无意义,举例来说,假设真的可以实现创建了一个Math类型的引用,接下来也不可能使用m.sin(...)这种形式来调用方法,所以你只需要使用Object来接收这个对象,通过反射获得方法信息以后使用invokeMethod来调用
ZangXT 2010-06-23
  • 打赏
  • 举报
回复
没有办法,既然不知道类型,当然无法转换。
两种情形:
1.根据字符串类型的类名和字符串类型的方法信息,通过反射调用。
2.根据父类信息调用。比如利用反射实现简单工厂模式。
sillf 2010-06-22
  • 打赏
  • 举报
回复
我的意思就是仅仅给你一个字符串,要求动态产生一个该字符串对应的变量,而不仅仅是实例:

public Object ref(String str)
{
Class cl=Class.forName(str);
变量类型 var=cl.newInstance();
}
现在需要的是用反射通过str确定的“变量类型”
liyingkuan 2010-06-22
  • 打赏
  • 举报
回复
能具体讲讲吗?
sun0322 2010-06-22
  • 打赏
  • 举报
回复
捕获一下这个异常classcastexception
sillf 2010-06-22
  • 打赏
  • 举报
回复
楼上注意 变量与实例是两个不同概念,变量相当于一个指针,存储的是实例的地址,而实例是实际对象。
sillf 2010-06-22
  • 打赏
  • 举报
回复
上面那个Math是手动添加的,要是传入的字符串是未知的呢?
sun0322 2010-06-22
  • 打赏
  • 举报
回复
Math m=(Math)cl.newInstance();是缺乏移植性的

lz,为什么这个缺乏移植性啊??

能不能说一说,谢谢了!
HelloKata 2010-06-22
  • 打赏
  • 举报
回复
[Quote=引用楼主 sillf 的回复:]
....

显然用
Math m=(Math)cl.newInstance();是缺乏移植性的
[/Quote]

这怎么缺乏移植性了?
computermajorsmc 2010-06-22
  • 打赏
  • 举报
回复
Class.forName就是利用反射。。。。。。。。。。。

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧