1

私は匿名メソッドを使用する Java の伝統に固執しています。ジェネリック型として table_name を取るジェネリック インターフェイスを持つサード パーティのライブラリを使用しています。

お気に入り

TableQueryCallback<WYF_Brands> =new TableQueryCallback<WYF_Brands>() {
    @Override
    public void onCompleted(List<WYF_Brands> arg0, int arg1,
        Exception arg2, ServiceFilterResponse arg3) {
        // TODO Auto-generated method stub
    }
};

ここで WYF_Brands は私のテーブル名です。

私が欲しいのは

TableQueryCallback<WYF_Users> =new TableQueryCallback<WYF_Users>() {
    @Override
    public void onCompleted(List<WYF_Users> arg0, int arg1,
        Exception arg2, ServiceFilterResponse arg3) {
        // TODO Auto-generated method stub
    }
};

ここで、WYF_Users は別のテーブルです。

要件: すべてのテーブルでこのようなメソッドを使用したいが、再利用可能な方法で使用したい.

データベースに多数のテーブルがあり、テーブルごとに異なるメソッドを作成する必要はありません。任意のテーブル名を perameter として受け入れることができるジェネリックの使用方法がわかりません。

もう 1 つのことは、このインターフェイスがサード パーティのライブラリの一部であるため、実行可能な jar ファイル内にあるため変更できないことです。

私はJavaをプログラミング言語として使用しています。

4

2 に答える 2

1

ジェネリックメソッドが必要なようです:

public <T> TableQueryCallback<T> createTableQueryCallback() {
    return new TableQueryCallback<T>() {
        @Override
        public void onCompleted(List<T> list, int arg1,
                Exception arg2, ServiceFilterResponse arg3) {
            // I'm assuming the implementation here would be the same each time?
        }
    };
}

代わりに、名前付きのネストされたクラスを作成するだけの誘惑に駆られますが:

private static SomeSpecificTableQueryCallback<T> implements TableQueryCallback<T> {
    @Override
    public void onCompleted(List<T> list, int arg1,
            Exception arg2, ServiceFilterResponse arg3) {
        // I'm assuming the implementation here would be the same each time?
    }
}

...匿名にすることで、ここでメリットが得られる理由がわかりません。

于 2013-03-05T12:48:10.970 に答える
1

WYF_BrandsWYF_Usersおよび他のすべてのテーブルに共通の基本クラス/インターフェースがあると思います。ましょうWYF_Base。また、この基本クラス/インターフェイスは、共通メソッドを実装するのに十分であると想定しています。その場合、次のようにメソッドを一度実装できます。

public class CommonTableQueryCallback <T extends WYF_Base>
    implements TableQueryCallback <T>
{
    @Override
    public void onCompleted(List <T> list, int n,
        Exception exception, ServiceFilterResponse response) {
        // Implement your logic here.
        // All elements of `list` are guaranteed to extend/implement WYF_Base
        // And compiler knows this!

        WYF_Base e = list.get (0); // This is correct!
    }
}

次に、このクラスを次のように使用できます。

TableQueryCallback <WYF_Brands> callback = 
    new CommonTableQueryCallback <WYF_Brands> ();
于 2013-03-05T12:55:34.153 に答える