7

Eclipse では、次のような行の後:

リスト リスト = 新しい ArrayList();

そのすぐ下に「for」と入力し、その後に「ctrl-space」(デフォルト) を入力すると、この「for ループ」を完了するのに役立ついくつかのオプションが表示されます。 支援する

しかし、変数 "list" が、このコンテキストから直接推測されない可能性があるここから離れた場所で (たとえば、クラス フィールドとして) 宣言されている場合、または多くのリストが宣言されている場合、支援はうまく機能しません。

うまくいかない @@ 分割線 ---

ここに画像の説明を入力

場合によっては、Eclipse は支援できますが、メンバー変数に対しては機能しません。たとえば、手動で「another」と入力し、「:」の後に ENTER を入力しても、Eclipse はそれについて推測できませんでした....

(PS実行可能なケース:

自動推測

自動推測

希望の名前を入力して ENTER を押すとうまくいきます

希望の名前を入力し、ENTER、うまく機能します)

このようなシナリオでこの支援を機能させるためのヒントはありますか?

4

4 に答える 4

13

Ashutosh Jindal のヒントに従い、機能するテンプレートを構成することができました (Kepler リリースでテスト済み)。ここにあります:

for (${iterable_type:elemType(iterable)} ${iterable_element:newName(iterable_type)} :  ${iterable:var(java.lang.Iterable)}) {
    ${cursor}
}

主なポイントは、テンプレート定義でlocalVarvarに変更することでした ( Eclipse ドキュメントで明確に説明されています)。

それの使い方:

  1. テンプレート名 (デフォルト テンプレートの場合はforeach ) を出力し、Enter キーを押します。テンプレートは、Eclipse によって選択されたデフォルト コレクション (宣言された最新のコレクション) で使用されます。
  2. TAB を 2 回押して、コレクション要素にジャンプします。適用されるすべての反復可能なコレクションを含むドロップダウン リストが表示されます。
  3. 上/下矢印を使用して目的のコレクションを選択し、Enter キーを押します。Eclipse は要素のタイプと名前を調整します (非常に優れています)。

クリックするとスクリーンショットが表示されます

これは、Intellij テンプレートとほぼ同じように機能します。欠点は次のとおりです。

  • template には配列が含まれません (デフォルトのforeachテンプレートとは対照的に)。配列の場合、別のテンプレートを定義する必要があります。
于 2013-07-11T10:41:28.707 に答える
6

私はこれを自分で試したことはありませんが、コード テンプレートの定義を見てください。たとえば、foreachコード テンプレートは [設定] -> [Java] -> [エディタ] -> [テンプレート] で次のように定義されます。

foreach の定義

定義は次のとおりです。

for (${iterable_type} ${iterable_element} : ${iterable}) {
    ${cursor}
}

などの変数が使用されていることに注意してくださいiterable_type

このEclipseヘルプページを見てみましょう。

そこには変数があり${id:localVar(type[,type]*)}、次のように記述されています。

Evaluates to a local variable or parameter visible in the current scope that is a subtype of any of the given type. If no type is specified, any non-primitive local variable matches.
${array} is a shortcut for ${array:localVar(java.lang.Object[])}, but also matches arrays of primitive types.
${collection} is a shortcut for ${collection:localVar(java.util.Collection)}.
${iterable} is a shortcut for ${iterable:localVar(java.lang.Iterable)}, but also matches arrays. 

同じスクリーンショット:

変数

テンプレートがその変数を推測する範囲を拡大したい場合foreachは、適切な変数を使用してテンプレート定義を編集する必要があるかもしれません。

これが役立つかどうか教えてください。残念ながら、コード テンプレートの編集について詳しく調べたことがないので、具体的な例を示すことはできません。

于 2012-08-07T12:59:41.523 に答える
4

forループでコンテンツアシストを解決するために私が通常行うことは次のとおりです。

  • 上記で宣言されているコレクション変数とセミコロンを入力して、ローカル変数を作成します。

    list;
    
  • Ctrl+2 L を押します

  • Eclipse は、次のような新しいローカル変数宣言を生成します。

    List list2 = list;
    
  • my foreach と入力し、Ctrl+space を使用してオートコンプリートすると、次のようになります。

    List list2 = list;
    for (Object object : list2) {
    }
    
  • for ループ宣言の list2 にカーソルを置き、インライン変数を表す Alt+Shift+I を押します。

  • これにより、達成したいことが実現します。いくつかの練習の後、労力は最小限です。

    for (Object object : list) {
    }
    
于 2012-11-28T15:53:21.710 に答える