假设我有这个数组:
String[] names = {"stack1", "stack2", "stack3"};
是否可以使用这些名称动态实例化Stack
,因此会有3个名为stack1
,stack2
和stack
的对象?在代码后面,我想打电话给stack1.pop()
或stack3.empty()
,例如。
我被告知要看一下反思,但仍不确定如何。
答案 0 :(得分:3)
例如,如果您在String
中拥有类名,则可以通过反射创建对象。
你无法“动态”创建“变量”。例如:
String s = "foo";
// some magic that creates a variable identified by s
foo.callSomeMethod();
不会工作。
Java中的变量(字段,局部变量和参数)只能在编译时创建。
你可以做什么(以及有时正确的方法)是创建Map<String,YourType>
并通过此地图保存每个新创建的对象给定String
:
Map<String,MyType> map = new HashMap<String,MyType>;
String s = "foo";
map.put(s, new MyType());
// ...
map.get("foo").callSomeMethod();
答案 1 :(得分:1)
除非stack1
是默认包中的类,否则您将无法创建该类型的类。
如果它只是一个变量名,那么你仍然会错过这个类型。
查看Java编译器API,它应该允许您动态创建源,然后编译和使用它们。我还没有用过它,但也许这篇文章可以提供帮助:http://www.javabeat.net/articles/73-the-java-60-compiler-api-1.html
此外,如果您可以详细说明您正在尝试的内容,这将会有所帮助。
答案 2 :(得分:0)
为什么不使用地图?
Map<String, Stack<String>> m = new HashMap<String, Stack<String>>();
m.put("stack1", new Stack<String>());
m.get("stack1").push("Hello!");