gpt4 book ai didi

Java 接口(interface) - 致命缺陷

转载 作者:行者123 更新时间:2023-11-29 07:53:47 25 4
gpt4 key购买 nike

假设我们有一个接口(interface)A,由类B实现:

public interface A {
public int getValueForName(String name);
}

public class B implements A {

public int getValueForName(String name) {
//implementation
}

public String getNameForValue(int value) {
//implementation
}

}

如果程序员在每次引用 B 的实例时始终使用类型 A,那么任何方法,比如 getNameForValue(),都已定义在 B 中但未在 A 中指定的是隐藏的,任何持有 A 类型引用的代码都无法访问。

这种方法似乎有一个致命的缺陷。引用 B 实例(类型为 A)的一段代码如何访问 getNameForValue()

最佳答案

真正的 缺陷是没有遵守接口(interface)的约定。如果我正在使用接口(interface),那么除了接口(interface)中定义的那些方法之外,我不应该关心任何其他方法。

如果接口(interface)没有定义我想要使用的方法,那么要么需要更新接口(interface)以适应新方法,要么我需要使用不同的接口(interface)。

例如,Collection .如果我有一个绑定(bind)到 Collection 契约的实例,那么我就可以访问 Iterator。 .但是,我知道我要返回的元素属于 List 类型,我想使用 ListIterator相反,哪个更强大。

问题是 Collection 没有为我定义任何访问 ListIterator 的方法。因此,我只有一个选择(因为我不能无谓地去更新 Collection 接口(interface)):改为使用 List 接口(interface)。

如果您在自己的代码中遇到这种情况,您的接口(interface)不支持它们需要的方法。在接口(interface)级别而不是实例级别添加该支持。

关于Java 接口(interface) - 致命缺陷,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19352910/

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