我想要实现的目标:
我目前正在更深入地研究 Java,尝试创建一个程序来读取银行帐户的 .csv 导出并使用它来做一些很酷的事情。
由于不同的银行有不同的文件导出,因此我创建了一个抽象类 Bank,其中仅包含普遍存在的数据字段,例如在任何交易中转账的资金。然后,我为每个单独的银行创建了一个子类,每个子类都扩展了抽象 Bank 类。在每个子类中,我创建了一个文件加载器方法来管理其特定的 .csv 标准。
我的问题:我希望程序在读取任何给定文件时动态决定在运行时使用哪个 Bank 子类。然后,该子类使用其方法来读取文件,以及将哪些数据传输到其父类(super class)。但是,我不想每次添加新子类时都添加新的 if(inputString ==bankSubclassName) {bankSubclass.loadFile() }
。
是否可以创建一个在运行时读取参数的系统,例如。一个字符串,然后使用“链接”到该参数的子类中的方法?每次添加新子类时无需编辑主程序?
目前,我似乎出现了心理障碍,完全陷入困境。也许有更好的方法?
提前致谢!
最佳答案
如果您不介意传递要加载的类的名称,则可以使用 Class
方法动态加载特定子类并调用 newInstance()
来创建该子类的一个对象。
Class c = Class.forName("some.pkg.name." + inputString);
Bank obj = (Bank)c.newInstance();
在此示例中,inputString
必须是您的子类的名称,obj
将是它的一个实例。
这些方法均已记录:https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html
关于Java - 动态选择要创建的子类/对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61924311/