用参数类型更改在方法定义中用参数类型更改的使用



我正在为DB访问创建API。

如果我想将参数类型从接口更改为实现类型。

例如,

API版本1.0:

getDomain1Data(SearchBy searchBy,List<String> someList);

我可以将其更改为下面吗?我想确保API用户不会使用其他域的表列名称搜索domain1数据。

getDomain1Data(Domain1SearchBy searchBy,List<String> someList);

如果我这样做应该添加到第一个方法,然后添加第二种方法,或者我可以将第一个方法替换为第二种方法。

谢谢。

如果已经有一个应用程序使用您的接口方法,则删除上一个方法是不明智的。我宁愿添加getDomain1Data(Domain1SearchBy searchBy,List<String> someList);并将@Deprecated注释添加到上一个。

示例代码:

@Deprecated
static interface SearchBy {
}
static class Domain1SearchBy implements SearchBy {
}
static interface Api10 {
    void some(SearchBy a);
}
static interface Api11 extends Api10 {
    void some(Domain1SearchBy b);
}
static class Api10Impl implements Api10 {
    @Deprecated
    public void some(SearchBy a) {
        System.out.println("some searchby");
    }
}
static class Api11Impl extends Api10Impl implements Api11 {
    public void some(Domain1SearchBy b) {
        System.out.println("some domain1");
    }
}
public static void main(String[] args) {
    //with api 1.0
    Api10 api10 = new Api10Impl();
    api10.some(new SearchBy() {});
    api10.some(new Domain1SearchBy());
    //with api 1.1
    Api11 api11 = new Api11Impl();
    api11.some(new SearchBy() {});
    api11.some(new Domain1SearchBy());
}

结果:

some searchby
some searchby
some searchby
some domain1

如果您正在更改正在使用的方法(在这种情况下),那么我认为正确的方法是添加新方法并将@deprectated标签添加到旧方法,解释了为什么已弃用它,以及应该使用哪种方法。

您不能仅将第一个替换为第二个,因为客户端可以将其称为 SearchBy对象为acutual参数。这将比导致编译错误。

使用两种方法也不可能,因为它们是歧义的。如果使用Domain1SearchBy对象调用两种方法都适用,因此不能决定使用哪种方法。

您仅有两个选项是给新彼此的名称或更改参数计数。

相关内容

  • 没有找到相关文章

最新更新