8

Eclipse のソース コードにジェネリックが欠落している場合は常に、「ジェネリック型引数を推測します...」と提案されます。

問題は、「ジェネリック型引数を推測...」が実際に何かを推測したことがないと思うことです。通常、提案はありません。

どのようなシナリオで機能しますか? それはどのように機能しますか?

何かを「推測」できるケースがいくつかあります - Eclipse はまだ空白のままです。

4

2 に答える 2

8

以下は、Eclipse で「ジェネリック型引数の推測」を使用する方法を示す例です。

最初にジェネリック クラスを宣言します。

// GenericFoo.java

public class GenericFoo<T> {
    private T foo;

    public void setFoo(T foo) {
        this.foo = foo;
    }

    public T getFoo() {
       return foo;
    }
}

次に、型を指定せずにインスタンス化し、不要な型キャストを行います。

// GenericFooUsage.java before refactoring

public class GenericFooUsage {

    public GenericFooUsage() {
        GenericFoo foo1 = new GenericFoo<Boolean>();

        foo1.setFoo(new Boolean(true));
        Boolean b = (Boolean)foo1.getFoo();
    }
}

「ジェネリック型引数の推測」を適用した後、コードは次のようにリファクタリングされます。

// GenericFooUsage.java after refactoring

public class GenericFooUsage {

    public GenericFooUsage() {
        GenericFoo<Boolean> foo1 = new GenericFoo<Boolean>();

        foo1.setFoo(new Boolean(true));
        Boolean b = foo1.getFoo();

       }
}

したがって、「ジェネリック型引数を推測する」は次のようになります。

  1. ジェネリック引数の型を自動的に推測します。
  2. 不要な型キャストを削除します。

使用時に見えるもの

于 2013-12-31T08:50:03.633 に答える
3

Eclipse ヘルプから:

この置換が可能なすべての場所を特定した後、ジェネリック型の生の型の出現をパラメーター化された型に置き換えます。
利用可能: プロジェクト、パッケージ、およびタイプ
オプション: 「clone() がレシーバー タイプのインスタンスを返すと想定」。通常、行儀の良いクラスはこの規則を尊重しますが、コードが違反していることがわかっている場合は、ボックスのチェックを外してください。

制約のない型引数をそのままにしておきます (推論するのではなく)。たとえば ArrayList a の要素に制約がない場合、このボックスのチェックを外しても、Eclipse は引き続きワイルドカード パラメータを提供し、参照を ArrayList に置き換えます。

ページの最後に例があります。

HTH

于 2012-11-30T08:54:38.370 に答える