【发布时间】:2019-11-14 20:15:47
【问题描述】:
import java.util.List;
public interface IEntityParam {
public void validateParam(Object object);
public default void validateParam(Object object,List<String> Str){
validateParam(object);
}
}
假设IEntityParam 是由许多类扩展的非常旧的接口,我需要其中的新方法。我在另一个参数中添加了一个新方法。
但是我的默认实现在其默认方法中没有使用新参数 List 。从技术上讲,没有问题。但它是否正确使用默认方法?或者我应该将这个新方法保留在特定的类中,因为我没有在默认实现中使用第二个参数。
注意:此处提供的字符串列表目前仅用于一种实现,但将来可用于其他实现。它不是很具体,也可以被其他实现使用。
【问题讨论】:
-
就
IEntityParam而言,这个默认的方法没有意义。 -
我宁愿使用新方法
validateParam(Object object,List<String> Str)创建另一个类,并在需要使用其新方法的任何地方扩展该类。而不是像你提到的那样修改已经在很多地方使用的现有接口。 -
添加到@ernest_k 非常令人困惑和误导
-
这是一个肮脏的解决方法,因为您不想因为新接口而更改多个类,但是可以发挥作用的解决方法尽可能好。我宁愿将所有类都调整为新的(相关)方法,也不愿这样做,因为重构代码是现代 IDE 的一大优势,但这只是个人意见。
-
要回答你的问题,我需要看看这个接口在重构之后是如何使用的。即,您如何决定在给定实例上调用两种方法中的哪一种?
标签: java methods interface default