Java - 动态选择要创建的子类/对象

标签 java inheritance

我想要实现的目标:

我目前正在更深入地研究 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/

相关文章:

ruby-on-rails - Ruby on Rails - 从父类调用每个子类的方法

java - 从 ArrayList 重新绘制类的实例

java - java执行器的默认执行策略

c++ - 继承二级基类构造函数: silent error

android - 以编程方式创建 FloatingActionButton(无 xml)

java - Java中的类等价

javascript - Object.create 相对于构造函数有什么实际优势?

java - 当数据传输只是次要功能时,如何最大限度地减少端口监听器的资源消耗

java - Tomcat 在幕后做了什么来为您提供 DataSource 的实现

java - 关于在对象的构造函数完成之前引用对象