我正在尝试创建一个可以在运行时通过为每个数组赋予createtempobjectname()方法创建的“名称”来实例化数组的类。我在运行这个程序时遇到了麻烦。我还想看看如何访问在运行时创建的特定对象,以及通过更改值或访问它们来访问这些数组。到目前为止,这是我的混乱,它编译但获得运行时异常。
import java.lang.reflect.Array;
public class arrays
{
private static String temp;
public static int name = 0;
public static Object o;
public static Class c;
public static void main(String... args)
{
assignobjectname();
//getclassname();//this is supposed to get the name of the object and somehow
//allow the arrays to become updated using more code?
}
public static void getclassname()
{
String s = c.getName();
System.out.println(s);
}
public static void assignobjectname()//this creates the object by the name returned
{ //createtempobjectname()
try
{
String object = createtempobjectname();
c = Class.forName(object);
o = Array.newInstance(c, 20);
}
catch (ClassNotFoundException exception)
{
exception.printStackTrace();
}
}
public static String createtempobjectname()
{
name++;
temp = Integer.toString(name);
return temp;
}
}
答案 0 :(得分:3)
创建一个地图,然后当键是你的名字并且值是你的数组时你可以添加键/值对。
答案 1 :(得分:0)
我希望你从这一行获得ClassNotFoundException
:
c = Class.forName(object);
第一次调用时object
的值为“1”,这不是有效的类名。
Class.forName
需要一个类名作为输入,例如"java.lang.Integer"
。试图以这种方式“命名”你的阵列对我来说没有意义。您需要选择适当的Java类名。
如果要“命名”一个数组实例(在创建它之后),您可以始终将该实例存储为Map
中的值,并使用名称作为键。
答案 2 :(得分:0)
来自@ Ash的回答,这是一些说明性的代码。请注意,没有涉及反射。
Map<String, Object> myMap = new HashMap<String, Object>();
...
Object myObject = ...
myMap.put("albert", myObject); // record something with name "albert"
...
Object someObject = myMap.get("albert"); // get the object named "albert"
// get("albert") would return null if there nothing with name "albert"
编辑我编辑了示例以使用Object类型,因为它与您尝试执行的操作更加一致(我认为)。但是您可以使用任何类型而不是Object ...只需在整个示例中替换类型。你可以用ArrayList做同样的事情;例如:
List<Date> dates = new ArrayList<Date>();
dates.add(new Date());
Date firstDate = dates.get(0);
请注意,不需要进行类型转换。