主题已经说了:
我现在正在考虑以下设计问题:我为包含各种方法的特定类型的对象定义了一个接口(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/