0

DBアクセス用のAPIを作成しています。

API を使用するアプリケーションが既に 1 つあります。この場合、パラメーターの型をインターフェイスから実装型に変更したい場合です。

例えば、

API バージョン 1.0:

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

これを以下に変更できますか?domain1API ユーザーが別のドメインのテーブル列名でデータを検索しないようにしたい。

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

これを行う場合、最初のメソッドに deprecated を追加してから 2 番目のメソッドを追加するか、最初のメソッドを 2 番目のメソッドに置き換える必要があります。

ありがとう。

4

3 に答える 3

1

インターフェイス メソッドを使用するアプリが既に存在する場合、以前のメソッドを削除するのは賢明ではありません。むしろ、前のものに注釈を追加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
于 2014-01-23T15:31:50.043 に答える
0

この場合のように、使用中のメソッドを変更する場合、正しい方法は、新しいメソッドを追加し、@Deprecated タグを古いメソッドに追加して、その理由を説明することだと思います。非推奨であり、代わりにどのメソッドを使用する必要があります。

于 2014-01-23T15:31:37.910 に答える
0

SearchByクライアントが実際のパラメーターとしてオブジェクトを使用して呼び出す可能性があるため、最初のものを2番目のものに置き換えることはできません。これにより、コンパイル エラーが発生します。

あいまいであるため、両方の方法を使用することもできません。オブジェクトで呼び出されたDomain1SearchBy場合、両方のメソッドが適用されるため、どちらを使用するかを決定できません。

あなたの唯一の2つのオプションは、新しいものに別の名前を付けるか、パラメータ数を変更することです.

于 2014-01-23T15:32:00.853 に答える