2 fergusj FergusJ 于 2015.05.26 12:37 提问

java 实例的名称通过传递的参数来创建???

写个方法:
方法功能是创建个类的实例,实例名称由该方法的传递参数指定

个人分析:
构造类的实例时,其实是new 构造方法 到一个变量中,
这个变量的名称需要由另一个变量(即传递参数)所指的字符串来指定

第一反应是反射,获取传递参数类的实例,失败。

暂时没想到好的方法

我的目的,期初是这么想的:

static String[] toks = { "baf", "fim1", "fim", "foo" };

依次取tok为数组中的每个字符串,创建类的实例
假设现在tok="baf",传入下面的方法onestringToAttribute,希望返回一个名字叫 baf 的BswabeAttribute 类的实例对象

 private static BswabeAttribute onestringToAttribute(String tok) {
                BswabeAttribute tok = new BswabeAttribute();
                return tok;
    }

直接这么写是错的 tok变量重用

后面的操作就是对这个几个实例对象的操作。
由于String[] toks 这个数组字符串是由用户输入的,所以不能提前预知这几个对象的名是什么。

7个回答

wsh1992o
wsh1992o   Rxr 2015.05.26 14:13

这个想法是不错,动态创建实例
可是没办法,创建实例的时候所要分配的内存空间的名称是必须要提前给的

dcxy0
dcxy0   Ds   Rxr 2015.05.26 12:50

为什么会有这个想法呢?没想到怎么实现

FergusJ
FergusJ 已更新,先谢谢您的帮助
2 年多之前 回复
beacon_2011
beacon_2011   Rxr 2015.05.26 13:30

你是想要
String a = 'aaa';
Object s = new Object();
这个样子吗?实现不了,换个思路吧~

edouardzyc
edouardzyc   2015.05.26 14:05

实例名称由该方法的传递参数指定?
我想说JAVA是静态语言,实例名称这种应该实在编译前就确认的,不能在运行的时候动态修改的把
我倒是想到asm应该可以实现,但是完全没有这个必要啊

FergusJ
FergusJ 如果我用动态语言,嵌入到java中,是否就可以实现呢,譬如说python
2 年多之前 回复
FergusJ
FergusJ 已更新,先谢谢您的帮助
2 年多之前 回复
Tiger_Zhao
Tiger_Zhao   Rxr 2015.05.26 14:37

只能是已定义的类,不能完全**动态**。

    Object createObject(String name) {
        if ("a".equals(name)==true) {
            return new a();
        } else if ("b".equals(name)==true) {
            return new b();
        }
    }
FergusJ
FergusJ 问题就是不能提前知道 这个字符串是什么,由用户输入的,所以才想到用参数传递进来
2 年多之前 回复
FergusJ
FergusJ 已更新,先谢谢您的帮助
2 年多之前 回复
liuyuxuan2388
liuyuxuan2388   2015.05.26 22:46

这样做的意义在哪呢?你想通过制定的对象名去获取对象吗?

FergusJ
FergusJ 已更新,先谢谢您的帮助
2 年多之前 回复
Tiger_Zhao
Tiger_Zhao   Rxr 2015.05.27 08:39

既然类型固定名称动态,不就是个字典么,Key 用 "baf"、 "fim1"、 "fim"、 "foo"。
字典就能做到“名称”动态啊!

Csdn user default icon
上传中...
上传图片
插入图片