java - OOP 设计 : Interface-Methods with implementation-dependent parameters

标签 java interface methods parameters

主题已经说了:

我现在正在考虑以下设计问题:我为包含各种方法的特定类型的对象定义了一个接口(interface)。 现在我遇到了问题,这个接口(interface)的不同实现需要额外的/不同的方法参数(因为它们的实现方式使得这是必要的),我无法将其合并到接口(interface)中,因为它们对所有 接口(interface)实现。

现在我意识到接口(interface)实现可以带有它们自己的属性文件,从那里加载它们的附加参数,但是如果这些参数需要在运行时传入怎么办?

目前我只能想到传入一个Map<String, Object> parameters克服这个问题——因为 JDK 类像 DocumentBuilderFactory通过提供类似 setAttribute(String attName, Object attValue) 的方法正在做一些非常相似的事情这个 似乎是解决这个问题的可行方法。 不过,我会对其他人如何解决此类问题感兴趣,或者其他想法?

我不想从接口(interface)派生并添加额外的方法,因为在我的情况下我将不得不抛出 NotImplementException来自基本接口(interface)的方法。

更新:

map 方法的最终问题是什么?如果实现类不能使用附加参数,则可以完全忽略它。 其他人可能会检查 Map 是否包含所需的参数名称,检查其值的类型并在有效时使用它们,否则抛出异常。 我还看到这被用于抽象类 JAXBContext,所以它似乎是一种常见的方法..

更新:

我决定采用 map 方法,因为我没有看到任何明显的缺点,而且它也在 JDK 中使用(是的,我知道这不一定意味着什么 :) 由于我不能接受这个问题的答案,所以我只会投票。感谢您的输入!

问候,

--曲

最佳答案

您应该只用自己特定的必需参数初始化每个继承者,并让接口(interface)方法保持无参数,如:

接口(interface)可运行:

public interface Runnable {
    public abstract void run();
}

实现:

public class MyRunnable {

    private final String myConcreteString;

    public MyRunnable(String myConcreteString) {
        this.myConcreteString = myConcreteString;
    }

    public void run() {
        // do something with myConcreteString
    }
}

关于java - OOP 设计 : Interface-Methods with implementation-dependent parameters,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9112623/

相关文章:

java - JAXB 解码

java - getBaseContext 还是 getContext?它们有何不同?

oop - 您如何命名接口(interface)的 "reference"实现?

ruby - 方法名格式

Java 方法给出意外的返回

methods - 向 Julia 基运算符添加新方法

java - 如何在MySQL中同时插入和检索

Java Hibernate在同一事务中使用同一 session 保存一个对象并更新不同的对象仅更新而不保存

javascript - Angular 4+ 通过接口(interface)从子级向父级发送服务

intellij-idea - "same JVM signature"实现包含 getter 方法的 kotlin 接口(interface)