问题描述
- 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 这个数组字符串是由用户输入的,所以不能提前预知这几个对象的名是什么。
解决方案
这个想法是不错,动态创建实例
可是没办法,创建实例的时候所要分配的内存空间的名称是必须要提前给的
解决方案二:
为什么会有这个想法呢?没想到怎么实现
解决方案三:
你是想要
String a = 'aaa';
Object s = new Object();
这个样子吗?实现不了,换个思路吧~
解决方案四:
实例名称由该方法的传递参数指定?
我想说JAVA是静态语言,实例名称这种应该实在编译前就确认的,不能在运行的时候动态修改的把
我倒是想到asm应该可以实现,但是完全没有这个必要啊
解决方案五:
只能是已定义的类,不能完全**动态**。
Object createObject(String name) {
if ("a".equals(name)==true) {
return new a();
} else if ("b".equals(name)==true) {
return new b();
}
}
解决方案六:
这样做的意义在哪呢?你想通过制定的对象名去获取对象吗?
解决方案七:
既然类型固定名称动态,不就是个字典么,Key 用 "baf"、 "fim1"、 "fim"、 "foo"。
字典就能做到“名称”动态啊!