我正在处理一个项目,其中有一个抽象类(
在我们的代码被其他人审核时,他告诉我们,不应该从超类调用子类方法,并且他说这不是最佳实践。以下是我们的类结构。请问是否这种做法不正确?
BaseConverter
),其中有一个抽象方法(convert()
)和一些具体方法。其中一个重要的具体方法是invokeConverter()
,它基本上会调用子类中实现的convert()
方法。在我们的代码被其他人审核时,他告诉我们,不应该从超类调用子类方法,并且他说这不是最佳实践。以下是我们的类结构。请问是否这种做法不正确?
@Named
public abstract class BaseConverter{
@Inject
private ConversionDriver conversionDriver;//this class is responsible to return the correct subclass object based on the type
protected abstract String convert(Object toConvert);
public String invokeConverter(ConverterType type, Object toConvert){
conversionDriver.getConverter(type).convert(toConvert);//getConverter() return the subclass object based on the type
}
....
....
}
invokeConverter
似乎执行的是静态方法而不是实例方法,因为它检索一些对象来执行转换。这基本上意味着必须创建一个子类实例,然后根据类型创建另一个实例。模板方法应该直接使用当前实例,假设它是“正确的实例”,而静态方法应该选择正确的子类。 - RealSkepticprivate ConversionDriver conversionDriver;
移动到调用类中,这样convert()
将被正确实例调用。非常感谢。 - whoami