我正在为学校编写一个Java程序(所以:严格的规则......)以图形方式显示数学函数(如Sin,Cosine和Tangent,以举例)。
我有两个接口:Function
和DifferentiableFunction
,每个数学函数都存储在扩展Function
或DifferentiableFunction
的类中。
当我启动程序时,我有一个文本字段,我需要在其中写下数学函数的名称(它们将由教授添加作为测试),我的想法是能够通过以下方式引用类名:文本字段输入。
问题是:经过几天的搜索,我真的不知道该怎么做,或者即使有可能。
请帮助我,我被困住了,截止日期临近!
答案 0 :(得分:3)
是的(合理地)是可能的。虽然我更愿意使用JComboBox
,但如果你不能...... {/ p>
有问题。您的命名风格可能与输入的内容不匹配,因此您需要考虑到这一事实......
基本上,您需要的是JTextField
中的文本以及充当函数包名称的前缀。
然后,您可以使用Class.forName
查找该类,并使用Class#newInstance
创建该类的新实例。
从那里你需要确定该类支持哪个接口,例如......
try {
Class<?> clazz = Class.forName(packagePrefix + "." + functionName);
Object instance = clazz.newInstance();
if (instance instanceof DifferentiableFunction) {
//...
} else if (instance instanceof Function) {
//...
}
} catch (ClassNotFoundException ex) {
ex.printStackTrace();
} catch (InstantiationException ex) {
ex.printStackTrace();
} catch (IllegalAccessException ex) {
ex.printStackTrace();
}
现在,正如我所说,这非常容易出错,所以你需要小心
另一种方法可能是将每个类的实例加载到某种Map
中,并使用它来查找所需的函数。