0

我们知道如何通过在 main 中编写来创建实例...

Class newObject = new Class();

有没有办法通过用户输入创建一个“newObject”并弹出一个新的newObject?我正在考虑使用扫描仪,但我不确定如何完成。我是这样猜测的:

Scanner sc = new Scanner(System.in);
Class sc.next(); = new Class();

还是这样?

Scanner sc = new Scanner(System.in);
(some name) = sc.next();
Class (some name) = new Class();

因此,用户将对象名称(某个名称)输入到扫描仪中,然后将创建该对象名称(某个名称)。

非常感谢您!

4

3 回答 3

0

您可以使用 Apache commons 中的 BeanUtils 来编写一个为您执行此操作的方法。我以前做过类似以下的事情。

    public <T> T bindBean(String[] line, Class<T> cls) throws Exception {
        T newInstance = cls.newInstance();
        Map<String, Object> properties = BeanUtils.describe(newInstance);
        Field[] format = cls.getDeclaredFields();
        for (int i = 0; i < format.length; i++) {
            properties.put(format[i].getName(), line[i]);
        }
        BeanUtils.populate(newInstance, properties);

        return newInstance;
    }

您可以像上面一样创建一个方法,然后从 Scanner 传递 line[] 参数。或者您可以从方法内部获取值。那只是偏好。

我在这里抛出了异常,因为我只是想证明我的观点而不是处理它们。希望这是您正在寻找的。

于 2012-11-19T08:01:00.453 回答
0

最好的方法是创建一个接受 Scanner 类的构造函数来创建 Class,假设您可以访问 Class 代码并且可以输入值。

Class testClass{

  testClass(Scanner input)
  {
    //Populate the class.
  }

}

如果 Class 是原始类型,那么您可以只使用 nextInt (或其他相关)类型函数。

于 2012-11-18T11:27:11.647 回答
0

您可以将反射用于您的目的,如下所示:

ClassLoader classLoader = ClassLoader.getSystemClassLoader();
String className = sc.next()
Class userClass = classLoader.loadClass(className);
Object classInstance = userClass.newInstance();

类加载器用作其名称状态:用于加载类。只需给它类的名称,如果在您的可执行库(即 jar 文件或类)或项目构建路径中找到此类,它将创建您需要的类(仍然不是实例)。

比你使用这个类来创建一个实例,这会产生一个具有所需类实现的通用对象

于 2012-11-18T11:28:47.160 回答