11

それぞれが異なる型と戻り値の型を使用する、いくつかの異なるクラスによって実装されるインターフェイスがあります。戻り値の型はメソッドのジェネリック型から推測できますが、これを実装するのに問題があります。

現在、インターフェイスは次のようになっています。

public interface TransformUtilsBase<T> {

    Class<?> transformToNhin(T request, BrokerContext brokerContext);
}

Impl クラスを次のようにしたい:

public class TransformUtilsXCPD implements TransformUtilsBase<foo> {

    bar transformToNhin(foo request, BrokerContext brokerContext) {
        code here
    }

impl では、戻り値の型がどうあるべきかを知っています。インターフェイス レベルでは、それを判断する方法はありません。

インターフェースをまったく使わずに、すべて同じメソッド名を持ついくつかのクラスを作成することもできますが、それらはすべて同じ目的で使用されるため、それを形式化したかったのです。種類が違うだけです。

または、utility 操作であるため、静的メソッドの大きなクラスを 1 つだけ持つこともできますが、同じ名前のメソッドが非常に多く、必要なすべてのヘルパー メソッド (ここでもすべて同じ名前) を持つクラスを管理するのは扱いにくくなっています。

私は静的メソッドを実行できませんが、インターフェイスを実装することは、機能を形式化するための最良のオプションのようです。戻り値の型を処理する方法がわかりません。

編集:インターフェースを拡張して完全な例を表示し、さらなる混乱を防ぎます。インターフェース

public interface TransformUtilsBase<T, U> {
    Class<?> transformToNhin(T request, BrokerContext brokerContext);
    Class<?> transformToXca(U request, BrokerContext brokerContext);
}

実装

public class TransformUtilsXCPD implements TransformUtilsBase<Foo, Bar> {
    Baz transformToNhin(Foo request, BrokerContext brokerContext) { code here }
    Biz transformToXca(Bar request, BrokerContext brokerContext) { code here }
}
4

1 に答える 1

14

戻り値の型の型も宣言しないのはなぜですか、次のように

public interface TransformUtilsBase<T, S> {

    S transformToNhin(T request, BrokerContext brokerContext);
}

戻り値の型を特定の型に「バインド」することもできます(たとえばBar

public interface TransformUtilsBase<T, S extends Bar> {

    S transformToNhin(T request, BrokerContext brokerContext);
}

実装するクラスは次のように宣言します

public class TransformUtilsXCPD implements TransformUtilsBase<Foo, BarImpl> {

    BarImpl transformToNhin(Foo request, BrokerContext brokerContext) {
        //code here
    }
}

BarImplのサブクラスはどこですかBar

于 2013-05-23T04:45:46.253 に答える