0

有没有办法根据用户输入创建对象的名称?

例如。

Object scan.nextLine() = new Object();
4

5 回答 5

1

不,你不能这样做。

我建议有一个自定义类并存储 instanceName:

public class MyClass {

    private String instanceName;
    public MyClass(String instanceName) {
        this.instanceName = instanceName;
    }

}

MyClass myObj = new MyClass(scan.nextLine());
于 2013-03-05T11:04:14.280 回答
1

,这是不可能的。Java中没有动态变量。Java 变量名必须在编译时在源代码中声明。

如果要使用用户输入的值存储对象,您可以尝试使用 aMap来保存数据,如下所示。

Map<String, Object> objects = new HashMap<String, Object>();
String name = scan.nextLine();

Object obj = new Object();
objects.put(name, obj); // saving the objects in Map
于 2013-03-05T11:21:39.690 回答
0

不,你不能在 java 中这样做。因为您应该已经定义了一个类来创建它的对象。

于 2013-03-05T11:03:43.173 回答
0

有一些方法可以让你假装这样做。您可以使用地图来感知动态命名的对象。但是,既然您说您是初学者,那么简短的回答是否定的。确保你知道你在你的例子中要求什么。你的例子相当于说:

String line = "foo";
Object line = new Object();

我的猜测是这不是你想要的(而且不可能)。

于 2013-03-05T11:07:55.727 回答
0

鉴于线

Type variable_name = expression ;

该名称variable_name仅用于引用表达式结果的其余范围。你知道Java是一种编译语言,这些名字只对程序员有用。一旦编译器完成它的工作,它就可以使用转换表并将这些名称替换为它想要的任何 ID。

由于这些名称在运行时甚至不存在,因此无法在运行时为变量选择名称。

但是,您可能需要根据用户输入访问对象(例如在 PHP 变量 variables 中$$a_var)。根据您的上下文,您可以使用反射来访问实例成员,或者使用简单的Map<String, Object>. 反射示例:

public class VariableRuntime {

    static class Person {
        public String first, last, city; 
    }

    public static void main(String[] args) throws Exception {
        Person homer = new Person();

        homer.first = "Homer";
        homer.last = "Simpson";
        homer.city = "Springfield";

        System.out.println("What do you want to know about Homer? [first/last/city]");

        String what = new Scanner(System.in).nextLine();
        Field field = Person.class.getDeclaredField(what);

        System.out.println(field.get(homer));
    }

}

与 a 相同Map<String, String>

public class VariableRuntime {


    public static void main(String[] args) throws Exception {
        Map<String, String> homer = new HashMap<String, String>();

        homer.put("first", "Homer");
        homer.put("last", "Simpson");
        homer.put("city", "Springfield");

        System.out.println("What do you want to know about Homer? [first/last/city]");

        String what = new Scanner(System.in).nextLine();

        System.out.println(homer.get(what));
    }

}
于 2013-03-05T11:13:33.367 回答