8

ジェネリックメソッドとオブジェクトを受け入れるメソッドとの利点は何ですか? 型の安全性はどのように保証されますか?

例: 以下のコード スニペットに記載されているいずれかの形式でインターフェイスを定義すると、どのような違いがありますか?

public interface MyInterface {
  public <MT> String myMethod(MT t);
}

また

public interface MyInterface {
  public String myMethod(Object t);
}

私の意見では、ジェネリック メソッドは、その周りにバインドされた型を入力する場合にのみ有利です。たとえば、型パラメーターは Serializable クラスのようにする必要があります。そうでなければ意味がありません..より多くの洞察を探しています

public interface MyInterface {
  public <MT extends Serializable> String myMethod(MT t);
}
4

4 に答える 4

17

メソッドは通常、2 つの引数が相互に互換性があることを保証するため、またはメソッドのジェネリック型に依存する型を持つ値を返すために、ジェネリックにされます。

例えば、

public static <T> void sort(List<T> list, Comparator<? super T> c)

リストの型とコンパレータの型が互換性があることを確認します。署名が同じである必要はありません。

public static void sort(List list, Comparator c)

次の例では、戻り値の型はメソッドのジェネリック型によって異なります。

public static <T extends Object & Comparable<? super T>> T min(Collection<? extends T> coll)

これにより、次のことが可能になります。

List<Integer> intList = ...;
Integer min = Collections.min(intList);

メソッドが

public static Comparable T min(Collection coll)

あなたがしなければならないだろう

Integer min = (Integer) Collections.min(intList);

コードを次のように変更しても、コンパイラからの警告はありません。

Long min = (Long) Collections.min(intList);
于 2012-12-21T19:21:59.240 に答える
-1

ジェネリック メソッドは、メソッドに渡すことができるパラメーターの型を制限します。これにより、処理できる入力が制限される、よりまとまりのあるコードがもたらされるため、特定の機能があると合理的に想定できます。

例えば

public interface MyInterface {
    public [MT extends BaseClass] String myMethod(MT t);
}

ここで、BaseClass に適用できるすべてのメソッドがこのメソッドの t に適用できることが常にわかります。

于 2012-12-21T19:23:36.030 に答える