我们有一个例子,我们需要构建一个资源
,它可以是两种类型之一:逻辑
或物理
。对于每个资源子类型,我们都附加了一个Configuration
,它可以是LogicalConfiguration
和PhysicalConfiguration
。
这样做是因为配置对象是可编辑的并且需要进行版本控制。例如一个资源可以有两个配置版本: Activity 的和草稿的。 Resource
中提供了添加配置的方法addConfiguration(Configuration config)
现在,我们面临一个问题,LogicalConfiguration
可能会错误地传递给 PhysicalResource
的 addConfiguration
方法。
Resource resource = new PhysicalResource()
Configuration config = new LogicalResourceConfiguration();
physicalResource.addConfiguration(config)
此调用将成功,并且将添加错误的配置。可以使用以下方法来避免这种情况。
- 我们执行
instanceOf
检查或定义成员Type
,但这会破坏多态性。 - 我们创建了两个方法
addLogicalConfiguration
/addPhysicalConfiguration
,其中一个在运行时失败。
解决这个问题最合适的方法是什么?或者是否有特定的模式来解决此类问题?
最佳答案
您可以向 Resource 类添加泛型类型参数:
class Resource<T extends Configuration> {
public void addConfiguration(T config) {}
}
然后,您可以:
class PhysicalResource extends Resource<PhysicalConfiguration> {...}
class LogicalResource extends Resource<LogicalConfiguration> {...}
关于java - 重写方法的多态参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22156170/