我们知道如何通过写入主...
来创建实例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();
因此,用户将一个对象名称(某个名称)输入扫描程序,并创建该对象名称(某个名称)。
非常感谢你!
答案 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,因为我只是想证明我的观点而不是处理它们。希望这是你正在寻找的。 p>