gpt4 book ai didi

java - 接口(interface)中的默认方法 - Java

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:30:42 25 4
gpt4 key购买 nike

import java.util.List;

public interface IEntityParam {

public void validateParam(Object object);

public default void validateParam(Object object,List<String> Str){
validateParam(object);
}
}

假设 IEntityParam 是一个由许多类扩展的非常旧的接口(interface),我需要其中的新方法。我添加了一个带有另一个参数的新方法。但是我的默认实现不在其默认方法中使用新参数列表。从技术上讲,没有问题。但它是否正确使用默认方法?或者我应该将这个新方法保留给特定的类,因为我在默认实现中没有使用第二个参数。

注意: 此处提供的字符串列表目前仅用于一种实现,但将来可用于其他实现。它不是很具体,也可以被其他实现使用。

最佳答案

这可能是对默认方法的误用。众所周知,当接口(interface)/契约(Contract)随着新方法发展时,默认方法可以促进向后兼容性,但您的问题是并非所有 IEntityParam 实现都关心“契约(Contract)”的新版本。默认方法在概念上是接口(interface)契约的一部分。

解决当前需求的正常方法是扩展接口(interface):

public interface IEntityParam {
public void validateParam(Object object);
}

public interface IEntityParamExtended extends IEntityParam {
public default void validateParam(Object object,List<String> Str);
}

这样,需要第二种方法的类将实现 IEntityParamExtended 并为这两种方法提供实现;而 IEntityParam 的所有其他实现不受影响。

将来,当 IEntityParamExtended 需要提升为 IEntityParam 时(即,当新方法构成 IEntityParam 契约的一部分时) ,您可以使用 default 方法来避免强制更改和重新编译所有现有实现。

关于java - 接口(interface)中的默认方法 - Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56881988/

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