是否可以使用扫描仪创建实例?

时间:2012-11-18 11:24:24

标签: java

我们知道如何通过写入主...

来创建实例
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();

因此,用户将一个对象名称(某个名称)输入扫描程序,并创建该对象名称(某个名称)。

非常感谢你!

3 个答案:

答案 0 :(得分:0)

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

Class testClass{

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

}

如果Class是基元,那么你可以使用nextInt(或其他相关的)类型函数。

答案 1 :(得分:0)

您可以按照以下方式使用反射:

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

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

比使用此类创建一个实例,该实例导致具有所需类实现的一般对象

答案 2 :(得分: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;
    }

您可以创建上述方法,然后从扫描仪传递line []参数。或者您可以从方法内部获取值。这只是偏好。

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