我只是在学习 Java,但我的问题既与 Java 相关,也很笼统。
我的情况是这样的:我有一个方法,我想通过继承由几个类共同使用。在方法块中,我需要声明调用类的变量,从中创建对象,这些对象位于调用类的 ArrayList<> (“数组”)中,并通过 ObjectOutputStream (“输出”)发送输出到序列化文件。
我有以下课程:
CustomerInternalFrame.java,它使用 Customer 类型的 ArrayList 维护序列化 Customer.java 的“数组”。
ContractorInternalFrame.java,它使用 Contractor 类型的 ArrayList 维护序列化 Contractor.java 的“数组”。
VendorInternalFrame.java,它使用 Vendor 类型的 ArrayList 维护序列化的 Vendor.java 的“数组”。
在每个 InternalFrame 类中,我都有以下方法 addRecords(将“客户”替换为适当的类,客户、承包商或供应商):
private void addRecords() {
// object to be written to the file
Customer record;
// loop until end of array
for (Customer element : array) {
// check for closed streamer and invalid entries
try {
// create a new object from current fields
record = new Customer(
element.getName(),
element.getLastName(),
element.getAddress1(),
element.getAddress2(),
element.getCity(),
element.getState(),
element.getZip(),
element.getPhone(),
element.getCell());
// write new record
output.writeObject(record);
} // end try
... (catch blocks)
} // end for
} // end method
我已经深思熟虑并寻找了一种以编程方式更改上述“客户”一词的方法,以便我可以声明一个方法(或类) addRecords() 并让三个 InternalFrame 类中的每一个都使用它,而无需复制代码。我当然不能在所有情况下都用“对象”替换“客户”这个词,因为“对象”没有我的方法 getName()、getAddress1() 等。我也不能用“对象()”替换“客户” " 数组,出于同样的原因。(换句话说,使用数组——通常的解决方案——在这种情况下不起作用,因为我必须使用超类数组然后向下转换它,但向下转换它需要首先声明最初命名的类。所以在这种情况下,数组只是一个恶性循环。)
我意识到拥有三个单独的 addRecords() 方法可以让我更改我在各自文件中记录的任何字段,因为客户、承包商和供应商很可能有不同的字段集。但是我还有其他类似的情况,我在代码中所做的事情是相同的,但是由不同的类(例如类似的事件处理程序)调用,如果能够知道这样的事情肯定会很好完全可以做到。
那么,有没有办法改变变量类型,包括将一个变量传递给方法或构造函数,以便多个类可以使用相同的代码来创建这些特定类的对象?