java要求用户输入构造函数的参数?
所以我使用反射来构造一个用户定义的类;我向用户询问类的名称,以及类的首选构造函数有多少个参数
然后,程序会找到要使用的正确构造函数。这一切都很好,以下是我代码的相关部分:
Object[] params = new Object[numParams];
Class<?>[] paramTypes = ctor.getParameterTypes();
for (int i = 0; i < numParams; i++) {
System.out.format("Enter a value of type %s.\n", paramTypes[i].getName());
params[i] = sc.nextLine();
paramTypes[i].cast(params[i]);
}
numParams
是指定构造函数中的参数量ctor
如你所见,我要求用户输入一个由构造函数中的参数类型指定的变量类型
该类型输出良好(例如,如果构造函数的第一个参数是int
,程序会说,Enter a value of type int.
)
然而,一旦输入一个值并按下enter键,我通常会得到一个类强制转换异常。我的最终目标是使用数组params
来构造指定类的新对象
如何将用户输入转换为预期类型
# 1 楼答案
从输入中读取时:
将一个
Object
放在params[i]
中,它是String
(返回类型为nextLine()
)。 如果你期望从输入中得到一个int,那么仅仅进行强制转换是不行的。强制转换不会改变值的性质,它只是愚弄了编译器您需要解析输入,以在正确的类型中计算正确的值。在某些情况下,您必须测试不同的输入类型,以创建正确的对象类型,例如
或者,您可以使用
hasNextInt()
测试Scanner
中的类型,并使用nextInt()
读取正确的类型。但是无论如何,你必须在不同的输入类型上有一些if () else if
的东西或switch case