java - 重写方法的多态参数

标签 java arguments overriding polymorphism

我们有一个例子,我们需要构建一个资源,它可以是两种类型之一:逻辑物理。对于每个资源子类型,我们都附加了一个Configuration,它可以是LogicalConfigurationPhysicalConfiguration

这样做是因为配置对象是可编辑的并且需要进行版本控制。例如一个资源可以有两个配置版本: Activity 的和草稿的。 Resource中提供了添加配置的方法addConfiguration(Configuration config)

现在,我们面临一个问题,LogicalConfiguration 可能会错误地传递给 PhysicalResourceaddConfiguration 方法。

Resource resource = new PhysicalResource()
Configuration config = new LogicalResourceConfiguration();
physicalResource.addConfiguration(config)

此调用将成功,并且将添加错误的配置。可以使用以下方法来避免这种情况。

  1. 我们执行 instanceOf 检查或定义成员 Type,但这会破坏多态性。
  2. 我们创建了两个方法 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/

相关文章:

java - Android 应用程序可以使用 java 8 编译的 jar 吗?

javascript - 如何使用内置局部变量参数编写函数?

java - 在 Spring Batch 步骤中引用命令行参数

派生类中函数的 C++ "virtual"关键字。有必要吗?

java boolean 数组,其大小来自用户输入

java - 如何将源链接到 Intellij 中的项目,使 tomcat 能够使用类文件? (就像在 eclipse 中一样)

java - 带有 "feature-not-implemented"错误消息的 Smack 4.1 响应到类型为 'set' 的自定义 IQ

arguments - 如何将电子表格中的单元格参数作为范围传递给自定义函数?

swift - 创建主开关以更改所有背景颜色

java - 是否可以在同一个包中拥有两个同名的类?