代码之家  ›  专栏  ›  技术社区  ›  pandoragami

Java:在运行时创建具有不同名称的数组对象并访问/更新它们

  •  -1
  • pandoragami  · 技术社区  · 14 年前

    我正在尝试创建一个类,该类可以在运行时通过为每个数组提供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;
            }
    }
    
    3 回复  |  直到 11 年前
        1
  •  0
  •   Stephen C    14 年前

    下面是@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"
    

    编辑 我已经编辑了这个例子来使用type对象,因为它与您正在尝试做的事情(我认为)更接近。但是你可以用任何类型而不是对象…只需在整个示例中替换类型。您也可以对arraylist执行同样的操作;例如:

    List<Date> dates = new ArrayList<Date>();
    dates.add(new Date());
    Date firstDate = dates.get(0);
    

    注意,不需要类型转换。

        2
  •  3
  •   camickr    14 年前

    创建一个映射,然后当键是您的名称,值是您的数组时,您可以添加键/值对。

        3
  •  0
  •   Ash    14 年前

    我想你会得到 ClassNotFoundException 从这一行:

    c = Class.forName(object);
    

    价值 object 第一次调用它是“1”,它不是有效的类名。

    Class.forName 需要类名作为输入,例如 "java.lang.Integer" . 用这种方式给数组命名对我来说没有意义。您需要选择一个合适的Java类名。

    如果您想“命名”一个数组实例(在您创建了它之后),您可以将该实例存储为 Map ,使用名称作为键。