gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 20:22:41 26 4
gpt4 key购买 nike

主题已经说了:

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com