【发布时间】:2021-12-16 10:25:14
【问题描述】:
我有以下接口和抽象类:
public interface DataExporter {
MultipartFile export() throws IOException;
}
public abstract class AbstractExporter<T> implements DataExporter {
protected abstract Iterable<T> getData();
}
我在导出器类中调用getData() 方法,如下所示:
public class EmployeeExporter extends AbstractExporter<EmployeeDTO> {
protected Iterable<EmployeeDTO> getData() {
// code omitted
}
}
但是,在另一个类中,例如ManagerExporter,我需要将参数传递给getData() 方法:
public class ManagerExporter extends AbstractExporter<ManagerDTO> {
protected Iterable<ManagerDTO> getData(UUID uuid) {
// code omitted
}
}
我认为在AbstractExporter 中重载该方法不是一个好主意,
因为在那种情况下,EmployeeExporter 即使不使用它也需要实现它。那么,使用带 & 不带参数的 getData() 方法最合适的方法是什么?
注意:我可能还需要其他需要多个参数的实现,例如protected Iterable<ManagerDTO> getData(UUID uuid, UUID departmentUuid, UUID staffUuid)。在这种情况下,我是否需要使用 Object[] 之类的 Object 数组等?
【问题讨论】:
-
其他人没有接口/抽象类的经验吗?
-
@ChrisPratt 请回复?
-
如果你需要不同的方法签名,那么你不应该扩展同一个抽象类。
-
@LouisWasserman 在这种情况下,我该怎么办?您能否发布一个答案来解释您的建议?
-
uuid 参数是什么的 id?它是否确定了哪个经理或其他东西?是否有可能将其传递给 ManagerExporter 构造函数而不是 getData() 方法?或者您是否需要能够从 ManagerExporter 的单个实例中导出不同的数据集?
标签: java class interface overloading abstract-class