web-dev-qa-db-ja.com

便利なEclipse Javaコードテンプレートを探す

EclipseでさまざまなJavaコードテンプレートを作成することができます。

ウィンドウ>設定> Java>エディタ>テンプレート

例えば.

sysoutは次のように展開されます。

System.out.println(${Word_selection}${});${cursor}

sysoutに続けてCTRL+SPACEとタイプすることでこれを有効にすることができます。

現在どのような便利なJavaコードテンプレートを使用していますか?それの名前と説明、そしてなぜそれが素晴らしいのかを含めてください。

私は組み込みの既存の機能ではなく、テンプレートの独創的/新規な使用法を探しています。

  • Log4Jロガーを作成する
  • ディスプレイからSWTカラーを取得
  • Syncexec - Eclipseフレームワーク
  • シングルトンパターン/列挙シングルトン生成
  • Readfile
  • Const
  • 描きます
  • フォーマット文字列
  • コメントコードレビュー
  • 文字列フォーマット
  • 最後にロックしよう
  • メッセージフォーマット国際化とログ
  • Equalsbuilder
  • ハッシュコードビルダー
  • スプリングオブジェクトインジェクション
  • FileOutputStreamを作成します。
501
Jon

次のコードテンプレートは、必要に応じてロガーを作成し、適切なインポートを作成します。

SLF4J

${:import(org.slf4j.Logger,org.slf4j.LoggerFactory)}
private static final Logger LOG = LoggerFactory.getLogger(${enclosing_type}.class);

Log4J 2

${:import(org.Apache.logging.log4j.LogManager,org.Apache.logging.log4j.Logger)} 
private static final Logger LOG = LogManager.getLogger(${enclosing_type}.class); 

Log4J

${:import(org.Apache.log4j.Logger)}
private static final Logger LOG = Logger.getLogger(${enclosing_type}.class);

出典

JUL

${:import(Java.util.logging.Logger)}
private static final Logger LOG = Logger.getLogger(${enclosing_type}.class.getName());
413
Robert Munteanu

いくつかの追加のテンプレートがここにあります: リンクI - リンクII

私はこれが好きです:

readfile

 ${:import(Java.io.BufferedReader,  
           Java.io.FileNotFoundException,  
           Java.io.FileReader,  
           Java.io.IOException)}  
 BufferedReader in = null;  
 try {  
    in = new BufferedReader(new FileReader(${fileName}));  
    String line;  
    while ((line = in.readLine()) != null) {  
       ${process}  
    }  
 }  
 catch (FileNotFoundException e) {  
    logger.error(e) ;  
 }  
 catch (IOException e) {  
    logger.error(e) ;  
 } finally {  
    if(in != null) in.close();  
 }  
 ${cursor} 

UPDATE:このテンプレートのJava 7バージョンは次のとおりです。

${:import(Java.nio.file.Files,
          Java.nio.file.Paths,
          Java.nio.charset.Charset,
          Java.io.IOException,
          Java.io.BufferedReader)}
try (BufferedReader in = Files.newBufferedReader(Paths.get(${fileName:var(String)}),
                                                 Charset.forName("UTF-8"))) {
    String line = null;
    while ((line = in.readLine()) != null) {
        ${cursor}
    }
} catch (IOException e) {
    // ${todo}: handle exception
}
47
Jon

文字列をフォーマットする

MessageFormat - 選択範囲をMessageFormatで囲みます。

 ${:import(Java.text.MessageFormat)} 
 MessageFormat.format(${Word_selection}, ${cursor})

これにより、カーソルを文字列に移動し、選択範囲を文字列全体に拡大して(Shift-Alt-Up)、Ctrl-Spaceを2回押すことができます。

選択をロックする

lock - 選択した行をtry finallyロックで囲みます。ロック変数が存在すると仮定します。

${lock}.acquire();
try {
    ${line_selection}
    ${cursor}
} finally {
    ${lock}.release();
}

NB ${line_selection}テンプレートはサラウンドメニュー(Alt-Shift-Z)に表示されます。

31
jamesh

私は死んだポストを蹴っていることを知っていますが、完成のためにこれを共有したいと思いました:

シングルトン生成テンプレートの正しいバージョン。欠陥のあるダブルチェックロッキング設計を克服します(上記で説明し、他の箇所で説明しています)。

シングルトン作成テンプレート:これにcreatesingletonという名前を付けます。

static enum Singleton {
    INSTANCE;

    private static final ${enclosing_type} singleton = new ${enclosing_type}();

    public ${enclosing_type} getSingleton() {
        return singleton;
    }
}
${cursor}


上記の方法で生成されたシングルトンにアクセスするには:

シングルトンリファレンステンプレート:これにgetsingletonという名前を付けます。

${type} ${newName} = ${type}.Singleton.INSTANCE.getSingleton();
26
questzen

Map.entrySet()を反復処理するコードスニペットを追加します。

テンプレート:

${:import(Java.util.Map.Entry)}
for (Entry<${keyType:argType(map, 0)}, ${valueType:argType(map, 1)}> ${entry} : ${map:var(Java.util.Map)}.entrySet())
{
    ${keyType} ${key} = ${entry}.getKey();
    ${valueType} ${value} = ${entry}.getValue();
    ${cursor}
}

生成コード

for (Entry<String, String> entry : properties.entrySet())
{
    String key = entry.getKey();
    String value = entry.getValue();
    |
}

Screenshot

26
mmdemirbas

logでは、メンバ変数に追加するのに役立つちょっとした便利さ。

private static Log log = LogFactory.getLog(${enclosing_type}.class);
25
cgp

Mockitoを使って(「Javaステートメント」コンテキストで)モックを作成します。

${:importStatic('org.mockito.Mockito.mock')}${Type} ${mockName} = mock(${Type}.class);

そして "Javaの型メンバー":

${:import(org.mockito.Mock)}@Mock
${Type} ${mockName};

Voidを宣言して例外をスローします。

${:import(org.mockito.invocation.InvocationOnMock,org.mockito.stubbing.Answer)}
doThrow(${RuntimeException}.class).when(${mock:localVar}).${mockedMethod}(${args});

何かをするためにvoidメソッドを偽造します:

${:import(org.mockito.invocation.InvocationOnMock,org.mockito.stubbing.Answer)}doAnswer(new Answer<Object>() {
public Object answer(InvocationOnMock invocation) throws Throwable {
    Object arg1 = invocation.getArguments()[0];
    return null;
}
}).when(${mock:localVar}).${mockedMethod}(${args});

モックされたメソッドが1回だけ呼び出されたことを確認します。

${:importStatic(org.mockito.Mockito.verify,org.mockito.Mockito.times)}
verify(${mock:localVar}, times(1)).${mockMethod}(${args});

モックメソッドが呼び出されないことを確認します。

${:importStatic(org.mockito.Mockito.verify,org.mockito.Mockito.never)}verify(${mock:localVar}, never()).${mockMethod}(${args});

Google Guavaを使用した新しいリンクリスト(およびハッシュセットとハッシュマップについても同様)。

${import:import(Java.util.List,com.google.common.collect.Lists)}List<${T}> ${newName} = Lists.newLinkedList();

また、Testクラスを生成する巨大なテンプレートを使用しています。これは、関係者全員がカスタマイズする必要がある短縮された断片です。

package ${enclosing_package};

import org.junit.*;
import static org.junit.Assert.*;
import static org.hamcrest.Matchers.*;
import static org.mockito.Matchers.*;
import static org.mockito.Mockito.*;
import org.mockito.Mockito;
import org.slf4j.Logger;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import org.junit.runner.RunWith;

// TODO autogenerated test stub
@RunWith(MockitoJUnitRunner.class)
public class ${primary_type_name} {

    @InjectMocks
    protected ${testedType} ${testedInstance};
    ${cursor}

    @Mock
    protected Logger logger;

    @Before
    public void setup() throws Exception {
    }

    @Test
    public void shouldXXX() throws Exception {
        // given

        // when
        // TODO autogenerated method stub

        // then
        fail("Not implemented.");
    }
}
// Here goes mockito+junit cheetsheet
24
mantrid

ヌルチェック!

if( ${Word_selection} != null ){
    ${cursor}
}

if( ${Word_selection} == null ){
    ${cursor}
}
23
Prashant Bhate

私の最愛の人の1人はforeachです。

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

そして、traceoutです。追跡に使用しているからです。

System.out.println("${enclosing_type}.${enclosing_method}()");

私はちょうど別のものについて考えて、そしていつかインターネット上でそれを見つけました、const

private static final ${type} ${name} = new ${type} ${cursor};
21
Artem Barger

Sysoutについてのちょっとしたコツ - 名前を "sop"に変更したい。 Javaのライブラリには、 "sop"で始まるものは何もないので、すぐに "sop"と入力してブームすることができます。

20

現在のスコープ内の変数でIllegalArgumentExceptionをスローします(illarg)。

throw new IllegalArgumentException(${var});

良い

throw new IllegalArgumentException("Invalid ${var} " + ${var});  
17
Jon

コード作成には不向きですが、コードレビューには非常に便利です。

私のテンプレートcoderevのlow/med/highを以下のようにします。

/**
 * Code Review: Low Importance
 * 
 *
 * TODO: Insert problem with code here 
 *
 */

次に、[タスク]ビューに、会議中に表示したいすべてのコードレビューコメントを表示します。

14
PSU_Kardi

ここでさらにいくつかのテンプレート。

含まれています:

  • 特定の日付から日付オブジェクトを作成する
  • 新しいジェネリックArrayListを作成します。
  • ロガーセットアップ
  • 指定されたレベルでログを取る
  • 新しいジェネリックHashMapを作成する
  • 地図を繰り返し、キーと値を印刷します
  • SimpleDateFormatを使って時間を解析する
  • ファイルを1行ずつ読み込む
  • ログに記録され、捕捉された例外を再スローします
  • コードブロックの印刷実行時間
  • 定期タイマーを作成する
  • 文字列をファイルに書き込む
14
lucrussell

slf4jロギング

${imp:import(org.slf4j.Logger,org.slf4j.LoggerFactory)}

private static final Logger LOGGER = LoggerFactory
    .getLogger(${enclosing_type}.class);
11
Prashant Bhate

Java 7以降では、包含クラスへの静的参照を必要とする(または好む)ロガーを設定するための優れた方法は、新しく導入されたMethodHandles APIを使用して静的コンテキストでランタイムクラスを取得することです。

SLF4Jのスニペットの例は次のとおりです。

private static final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());

どのIDEでも単純なスニペットであることは別として、特定の機能を別のクラスにリファクタリングしても、誤ってクラス名を付けてしまうことはないので、それほど脆弱ではありません。

10
Timothy055

Beanプロパティ

private ${Type} ${property};

public ${Type} get${Property}() {
    return ${property};
}

public void set${Property}(${Type} ${property}) {
    ${propertyChangeSupport}.firePropertyChange("${property}", this.${property},     this.${property} = ${property});
}

PropertyChangeSupport

private PropertyChangeSupport ${propertyChangeSupport} = new PropertyChangeSupport(this);${:import(Java.beans.PropertyChangeSupport,Java.beans.PropertyChangeListener)}
public void addPropertyChangeListener(PropertyChangeListener listener) {
  ${propertyChangeSupport}.addPropertyChangeListener(listener);
}

public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener) {
  ${propertyChangeSupport}.addPropertyChangeListener(propertyName, listener);
}

public void removePropertyChangeListener(PropertyChangeListener listener) {
  ${propertyChangeSupport}.removePropertyChangeListener(listener);
}

public void removePropertyChangeListener(String propertyName, PropertyChangeListener listener) {
  ${propertyChangeSupport}.removePropertyChangeListener(propertyName, listener);
}
10
qualidafial

strf -> String.format("msg", args)は非常に単純ですが、入力の手間が省けます。

String.format("${cursor}",)
9
pjp

コードを使ってテストするとき、私はいくつかのsysoを削除するのを見逃していました。そこで私は自分自身でsytというテンプレートを作りました。

System.out.println(${Word_selection}${});//${todo}:remove${cursor}

私がコンパイルする前に、私はいつも私のTODOをチェックし、System.outをもう一度削除することを決して忘れないでしょう。

9
Calon

GUIスレッドでコードを呼び出します

次のテンプレートをショートカットslaterにバインドして、GUIスレッドにコードをすばやくディスパッチします。

${:import(javax.swing.SwingUtilities)}
SwingUtilities.invokeLater(new Runnable() {      
      @Override
      public void run() {
        ${cursor}
      }
    });
9
Duncan Jones

ロガー宣言のテンプレートは素晴らしいです。

私は私がより頻繁に使用するログレベルのlinfo、debug、warn、errorも作成します。

エラー:

logger.error(${Word_selection}${});${cursor}
8
fgui

現在のディスプレイからSWTカラーを取得します。

Display.getCurrent().getSystemColor(SWT.COLOR_${cursor})

Syncexecによるサラウンド

PlatformUI.getWorkbench().getDisplay().syncExec(new Runnable(){
    public void run(){
        ${line_selection}${cursor}
    }
});

シングルトンデザインパターンを使用します。

/**
 * The shared instance.
 */
private static ${enclosing_type} instance = new ${enclosing_type}();

/**
 * Private constructor.
 */
private ${enclosing_type}() {
    super();
}

/**
 * Returns this shared instance.
 *
 * @returns The shared instance
 */
public static ${enclosing_type} getInstance() {
    return instance;
}
8
Manuel Selva

テストメソッドを挿入する

私は最近非常に良い開発者と友人とのペアプログラミング中にこれと似たバージョンを見ました、そして私はそれがこのリストへの素晴らしい追加になるかもしれないと思う。

このテンプレートは、 ビヘイビアドリブン開発 (BDD)パラダイムから 与えられた方法 に従って、クラスに新しいテストメソッドを作成します。コードを構造化するためのガイドとして、コメントについて。メソッド名は "should"で始まり、残りのダミーのメソッド名 "CheckThisAndThat"をテストメソッドの責任を説明するための最良の説明に置き換えることができます。名前を入力すると、TABキーを押すと直接// Given sectionに移動します。そのため、前提条件を入力し始めることができます。

私はそれを3つの文字 "tst"にマッピングし、 "テストメソッドはいつ与えられるべきか"という説明を付けました。

私がそれを見たときに私が行ったようにあなたがそれが有用であると思うことを願っています:

@Test
public void should${CheckThisAndThat}() {
    Assert.fail("Not yet implemented");
    // Given
    ${cursor}

    // When


    // Then

}${:import(org.junit.Test, org.junit.Assert)}
8
MacLuq

そしてequalsbuilder、hashcodebuilderの適応:

${:import(org.Apache.commons.lang.builder.EqualsBuilder,org.Apache.commons.lang.builder.HashCodeBuilder)}
@Override
public boolean equals(Object obj) {
    return EqualsBuilder.reflectionEquals(this, obj);
}

@Override
public int hashCode() {
    return HashCodeBuilder.reflectionHashCode(this);
}
8
Jon

イベント用にすべてを作成する

イベントはJavaで作成するのはちょっと面倒です - それらすべてのインターフェース、メソッド、そして1つのイベントだけのために書くもの - 私は1つのイベントに必要なものすべてを作成する簡単なテンプレートを作りました。

${:import(Java.util.List, Java.util.LinkedList, Java.util.EventListener, Java.util.EventObject)}

private final List<${eventname}Listener> ${eventname}Listeners = new LinkedList<${eventname}Listener>();

public final void add${eventname}Listener(${eventname}Listener listener)
{
    synchronized(${eventname}Listeners) {
        ${eventname}Listeners.add(listener);
    }
}

public final void remove${eventname}Listener(${eventname}Listener listener)
{
    synchronized(${eventname}Listeners) {
        ${eventname}Listeners.remove(listener);
    }
}

private void raise${eventname}Event(${eventname}Args args)
{
    synchronized(${eventname}Listeners) {
        for(${eventname}Listener listener : ${eventname}Listeners)
            listener.on${eventname}(args);
    }
}

public interface ${eventname}Listener extends EventListener
{
    public void on${eventname}(${eventname}Args args);
}

public class ${eventname}Args extends EventObject
{
    public ${eventname}Args(Object source${cursor})
    {
        super(source);
    }
}

単一のEventObjectを共有するイベントがある場合は、テンプレートによって挿入されたカスタマイズされたものを削除し、raise___()on____()の適切な部分を変更するだけです。

汎用インターフェースと汎用クラスを使用して、素晴らしく、小さく、洗練されたイベントメカニズムを作成しましたが、Javaが総称を処理する方法が原因で機能しません。 =(

編集:1)イベントが発生している間にスレッドがリスナーを追加/削除していた問題に遭遇しました。 Listは使用中に変更できないので、リスナのリストがアクセスまたは使用されている場所にsynchronizedブロックを追加し、リスト自体をロックします。

8
Benny Jobigan

スプリングインジェクション

私はこれがゲームには遅いようなものであることを知っています、しかしここに私がクラスの中でSpring Injectionに使用するものがあります:

${:import(org.springframework.beans.factory.annotation.Autowired)}
private ${class_to_inject} ${var_name};

@Autowired
public void set${class_to_inject}(${class_to_inject} ${var_name}) {
  this.${var_name} = ${var_name};
}

public ${class_to_inject} get${class_to_inject}() {
  return this.${var_name};
}
7
Mike Clark

これはインスタンス化できないクラスのコンストラクタです。

// Suppress default constructor for noninstantiability
@SuppressWarnings("unused")
private ${enclosing_type}() {
    throw new AssertionError();
}

これはカスタム例外です。

/**
 * ${cursor}TODO Auto-generated Exception
 */
public class ${Name}Exception extends Exception {
    /**
     * TODO Auto-generated Default Serial Version UID
     */
    private static final long serialVersionUID = 1L;    

    /**
     * @see Exception#Exception()
     */
    public ${Name}Exception() {
        super();
    }

    /**
     * @see Exception#Exception(String) 
     */
    public ${Name}Exception(String message) {
        super(message);         
    }

    /**
     * @see Exception#Exception(Throwable)
     */
    public ${Name}Exception(Throwable cause) {
        super(cause);           
    }

    /**
     * @see Exception#Exception(String, Throwable)
     */
    public ${Name}Exception(String message, Throwable cause) {
        super(message, cause);
    }
}
7
David M. Coe

私はnullの値と空の文字列を探して、これらの断片を多用してきました。

受け取った引数をチェックするために、私は自分のメソッドの最初のコードとして "argument test"テンプレートを使います。

testNullArgument

if (${varName} == null) {
    throw new NullPointerException(
        "Illegal argument. The argument cannot be null: ${varName}");
}

あなたはあなたの会社やプロジェクトの標準に合うように例外メッセージを変更したいかもしれません。ただし、問題のある引数の名前を含むメッセージを含めることをお勧めします。そうでなければ、あなたのメソッドの呼び出し元は何が悪かったのか理解するためにコードを調べなければならないでしょう。 (メッセージのないNullPointerExceptionは、意味のないメッセージ "null"で例外を生成します)。

testNullOrEmptyStringArgument

if (${varName} == null) {
    throw new NullPointerException(
        "Illegal argument. The argument cannot be null: ${varName}");
}
${varName} = ${varName}.trim();
if (${varName}.isEmpty()) {
    throw new IllegalArgumentException(
        "Illegal argument. The argument cannot be an empty string: ${varName}");
}

上記のnullチェックテンプレートを再利用して、空の文字列のみをチェックするようにこのスニペットを実装することもできます。その後、これら2つのテンプレートを使用して上記のコードを作成します。

しかし、上記のテンプレートには、in引数がfinalの場合、生成されたコードを修正する必要があるという問題があります(${varName} = ${varName}.trim()は失敗します)。

あなたがたくさんの最終引数を使い、空の文字列をチェックしたいけれどもあなたのコードの一部としてそれらをトリミングする必要がないなら、代わりにこれを使うことができます:

if (${varName} == null) {
    throw new NullPointerException(
        "Illegal argument. The argument cannot be null: ${varName}");
}
if (${varName}.trim().isEmpty()) {
    throw new IllegalArgumentException(
        "Illegal argument. The argument cannot be an empty string: ${varName}");
}

testNullFieldState

私はまた、引数として送られない変数をチェックするためのスニペットをいくつか作成しました(大きな違いは例外タイプです。現在は代わりにIllegalStateExceptionになっています)。

if (${varName} == null) {
    throw new IllegalStateException(
        "Illegal state. The variable or class field cannot be null: ${varName}");
}

testNullOrEmptyStringFieldState

if (${varName} == null) {
    throw new IllegalStateException(
        "Illegal state. The variable or class field cannot be null: ${varName}");
}
${varName} = ${varName}.trim();
if (${varName}.isEmpty()) {
    throw new IllegalStateException(
        "Illegal state. The variable or class field " +
            "cannot be an empty string: ${varName}");
}

testArgument

これは変数をテストするための一般的なテンプレートです。本当にこれを理解することを学ぶのに数年かかりました、今私はそれを(もちろん上のテンプレートと組み合わせて)使っています!

if (!(${varName} ${testExpression})) {
    throw new IllegalArgumentException(
        "Illegal argument. The argument ${varName} (" + ${varName} + ") " +
        "did not pass the test: ${varName} ${testExpression}");
}

変数名または値を返す条件を入力し、その後にオペランド( "=="、 "<"、 ">"など)と別の値または変数を入力します。テストが失敗すると、結果のコードはIllegalArgumentExceptionをスローします。

式全体が "!()"で囲まれた、if句が少し複雑になった理由は、例外メッセージでテスト条件を再利用できるようにするためです。

おそらくそれは同僚を混乱させるでしょうが、彼らがコードを見なければならない場合に限り、あなたがこれらの種類の例外を投げれば彼らはそうする必要がないかもしれません...

これが配列の例です。

public void copy(String[] from, String[] to) {
    if (!(from.length == to.length)) {
        throw new IllegalArgumentException(
                "Illegal argument. The argument from.length (" +
                            from.length + ") " +
                "did not pass the test: from.length == to.length");
    }
}

この結果を得るには、 "from.length" [TAB] "== to.length"と入力してテンプレートを呼び出します。

その結果、 "ArrayIndexOutOfBoundsException"またはそれに類するものよりもはるかにおかしなことになり、実際にユーザーに問題を解決する機会を与える可能性があります。

楽しい!

5
Erk

私はこのように生成されたクラスのコメントが好きです。

/**
 * I... 
 * 
 * $Id$
 */

"I ..."はすぐに開発者にクラスの動作を説明するように促します。私は文書化されていないクラスの問題を改善するようです。

そしてもちろん、$ Id $は便利なCVSキーワードです。

5
skaffman

私の好きな少数は….

1:Javadoc、メソッドがSpringオブジェクトインジェクションメソッドであることに関するドキュメントを挿入する。

 Method to set the <code>I${enclosing_type}</code> implementation that this class will use.
* 
* @param ${enclosing_method_arguments}<code>I${enclosing_type}</code> instance 

2:デバッグウィンドウ。FileOutputStreamを作成し、バッファの内容をファイルに書き込みます。バッファを(BeyondCompareを使用して)過去の実行と比較したい場合、またはバッファが大きすぎてバッファの内容を表示できない場合(inspect経由).

Java.io.FileOutputStream fos = new Java.io.FileOutputStream( new Java.io.File("c:\\x.x"));
fos.write(buffer.toString().getBytes());
fos.flush();
fos.close();
4
jeff porter
  • public int hashCode()
  • public boolean equals(Object)

リフレクションではなく明示的なテストを使用すると、セキュリティマネージャでは遅くなり、失敗する可能性があります( EqualsBuilder javadoc )。

テンプレートには20のメンバーが含まれています。 TABを使って移動することができます。終了したら、apppend()への残りの呼び出しは削除されなければなりません。

${:import(org.Apache.commons.lang.builder.HashCodeBuilder, org.Apache.commons.lang.builder.EqualsBuilder)}
@Override
public int hashCode() {
    return new HashCodeBuilder()
        .append(${field1:field})
        .append(${field2:field})
        .append(${field3:field})
        .append(${field4:field})
        .append(${field5:field})
        .append(${field6:field})
        .append(${field7:field})
        .append(${field8:field})
        .append(${field9:field})
        .append(${field10:field})
        .append(${field11:field})
        .append(${field12:field})
        .append(${field13:field})
        .append(${field14:field})
        .append(${field15:field})
        .append(${field16:field})
        .append(${field17:field})
        .append(${field18:field})
        .append(${field19:field})
        .append(${field20:field})
        .toHashCode();
}

@Override
public boolean equals(Object obj) {
    if (obj == null) {
        return false;
    }
    if (obj == this) {
        return true;
    }
    if (obj.getClass() != getClass()) {
        return false;
    }
    ${enclosing_type} rhs = (${enclosing_type}) obj;
    return new EqualsBuilder()
            .append(${field1}, rhs.${field1})
            .append(${field2}, rhs.${field2})
            .append(${field3}, rhs.${field3})
            .append(${field4}, rhs.${field4})
            .append(${field5}, rhs.${field5})
            .append(${field6}, rhs.${field6})
            .append(${field7}, rhs.${field7})
            .append(${field8}, rhs.${field8})
            .append(${field9}, rhs.${field9})
            .append(${field10}, rhs.${field10})
            .append(${field11}, rhs.${field11})
            .append(${field12}, rhs.${field12})
            .append(${field13}, rhs.${field13})
            .append(${field14}, rhs.${field14})
            .append(${field15}, rhs.${field15})
            .append(${field16}, rhs.${field16})
            .append(${field17}, rhs.${field17})
            .append(${field18}, rhs.${field18})
            .append(${field19}, rhs.${field19})
            .append(${field20}, rhs.${field20})${cursor}
            .isEquals();
}
4
gswierczynski

私はこれをMessageFormatに使っています(Java 1.4を使って)。そのようにして私は国際化をするときに抽出するのが難しい連結がないことを確信しています

国際化

String msg = "${message}";
Object[] params = {${params}};
MessageFormat.format(msg, params);

ロギングも

log

if(logger.isDebugEnabled()){
  String msg = "${message}"; //NLS-1
  Object[] params = {${params}};
  logger.debug(MessageFormat.format(msg, params));
}
4
Mario Ortegón

静的インポートを使用したHamcrestテスト

JUnit 4.8.2の新しい機能(assertThat、is、hasItemsなど)を使用したい場合は、必要最低限​​のインポートで@Testメソッドを生成するためのテンプレートがあります。

@${testType:newType(org.junit.Test)}
public void ${testName}() throws Exception {
    // Arrange
    ${staticImport:importStatic('org.hamcrest.MatcherAssert.*','org.hamcrest.Matchers.*')}${cursor} 
    // Act

    // Assert

}

テストを書くとき、私はすでにそれを何度も使った。

Arrange-Act-Assertとは何ですか?

3
MartinL

プラグインの助けを借りて: http://code.google.com/p/Eclipse-log-param/

以下のテンプレートを追加することが可能です。

logger.trace("${enclosing_method}. ${formatted_method_parameters});

そして結果を得る:

public static void saveUserPreferences(String userName, String[] preferences) {
    logger.trace("saveUserPreferences. userName: " + userName + " preferences: " + preferences);
}
3
Andrey Rodionov

私はAndroid開発に以下のテンプレートを使用します。

詳細(対数)

Log.v(TAG, ${Word_selection}${});${cursor}

デバッグ(ログ)

Log.d(TAG, ${Word_selection}${});${cursor}

情報(ロジ)

Log.i(TAG, ${Word_selection}${});${cursor}

警告(Logw)

Log.w(TAG, ${Word_selection}${});${cursor}

エラー(Loge)

Log.e(TAG, ${Word_selection}${});${cursor}

アサート(Loga)

Log.a(TAG, ${Word_selection}${});${cursor}

TAGは私があらゆる活動で定義する定数です。

3
Terel

これは、ローカルな値を印刷/ログ記録するという面倒な作業の多くを省きます。 String内の変数名を自動的に取得します。これにより、入力やタイプミスを大幅に軽減できます。

テンプレート:

+ ", ${1:var}: " + ${1:var}

これには2つの落とし穴があります。

ローカル/パラメータ/フィールドを選択するように求められますが、これにはプリミティブ:(は含まれません

コードがエラーなしでコンパイルされるときはいつでも、プロンプトが最も頻繁に発生します。このマクロを使用すると一時的に壊れた構文が生成されることが多いので、複数の変数を挿入するにはある程度の調整が必要です。変数名にタイプミスがないという便利さに近いものは何もありません。

2
Terry

@Duncan Jonesにはすでにこのテンプレートがありますが、${line_selection}を追加して Shift + Alt + Z 便利な戦術です。

これは私が取り組んでいるプロジェクトの悪いデザインに対するちょっとしたハックな修正としてほんの少し役に立つだけかもしれませんが、私はレガシーコードがAWTスレッドからSwingコンポーネントを変更して断続的なバグを引き起こしている多くの状況を持っています。これらを素早く修正するために、私は使っています:

${:import(javax.swing.SwingUtilities)}
// Ensure that any Swing components will be invoked only from the AWT thread
SwingUtilities.invokeLater(new Runnable() {

    @Override
    public void run() {
        ${line_selection}${cursor}
    }
});

だから私は問題のある文を強調して使用することができます Shift + Alt + Z で囲む。このテンプレートをswinvokeと呼びます。

2
dassimon

これがList<Stuff>を反復処理するのに役立つforeachです。ループ内のオプションのコンテンツは、リストから要素を見つけてそれを返すためのものです。

for (${t:elemType(w)} elem: ${w:collection}) {
    if (elem.get.equals(${localVar})){
        return elem;
    }
}
return null;
1
Manu de Hanoi

EasyMockテンプレート

モックを作成

${:importStatic(org.easymock.EasyMock.createMock)}
${type} ${name} = createMock(${type}.class);

モックをリセット

${:importStatic(org.easymock.EasyMock.reset)}
reset(${var});

リプレイモック

${:importStatic(org.easymock.EasyMock.replay)}
replay(${var});

モックを確認

${:importStatic(org.easymock.EasyMock.verify)}
verify(${var});
1
Brent Worden

選択したWordから新しい JUnit テストケースを作成します。

これにはロガーが必要です(_loggerと呼ばれます:このスレッドにも非常に素晴らしいテンプレートがあります)。

私はこのテンプレートが大好きです。なぜなら、私が考える前に、実装されていないテストケースを素早く作成するのがとても簡単だからです。私がテストする必要があるケースを思い出させるものとして、彼らは私に失敗してそこに座るでしょう。

${:import(org.junit.Test, org.junit.Assert)}
    @Test
    public void fooTest() throws Throwable {
        try {
            ${cursor}
            Assert.fail("Not Implemented");
        } catch (Throwable e) {
            _logger.error("Failed test", e);
            throw e;
        }
    }

それを使用するには、テストケースの名前(たとえばtestSerializeObject)を入力し、Wordをハイライトしてヒットします。 Ctrl + Space (またはコードアシスト用に設定したものは何でも)。

JUnitの例外ビューアではなくコンソールで例外を確認するのが好きなので、テストケース用の私のお気に入りのテンプレートは例外を記録してからそれらを再スローするものです。

テストでログファイルよりもSystem.outを好む場合は、常に次のようなものを使用できます。

${:import(org.junit.Test, org.junit.Assert)}
@Test
public void ${Word_selection}() throws Exception {
    try {
        ${cursor}
        Assert.fail("Not Implemented");
    } catch (Exception e) {
        System.out.println("Failed test");
        e.printStackTrace();
        throw e;
    }
}
1
Mason Bryant

コードセクション

//--------------------------------------------------------------
//                       ${title}
//--------------------------------------------------------------
${cursor}

このテンプレートを使用して、コードのセクションへのコメント付けを簡単にします。それほど複雑ではありませんが、多くの時間を節約できました:)

1
coderatchet

SWTとプラグイン開発のための内部リスナークラス

${imports:import(org.Eclipse.swt.widgets.Listener)}
private class ${className} implements Listener{

    @Override
    public void handleEvent(Event e) {
        final Widget w = e.widget;
    }
}
0
tekkavi

list_methods - リストの追加、削除、カウント、包含のためのメソッドを生成します

public void add${listname}(${listtype} toAdd){
    get${listname}s().add(toAdd);
}

public void remove${listname}(${listtype} toRemove){
    get${listname}s().remove(toRemove);
}

public ${listtype} get${listname}(int index){
    return get${listname}s().get(index);
}

public int get${listname}Count(){
    return get${listname}s().size();
}

public boolean contains${listname}(${listtype} toFind){
    return get${listname}s().contains(toFind);
}

${cursor}

id - 簡単なJPAのためのアノテーション、インポート、フィールド、そしてゲッターを挿入します。

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

public Long getId(){
    return id;
}

${cursor}
${:import (javax.persistence.GenerationType,javax.persistence.GeneratedValue,javax.persistence.Id)}
0
Stephen Erdman

基本的なテストクラスを作成するテンプレートの答えを見ました。代わりにこの方法を好む場合は、次のような個々の呼び出しがあります。

@BeforeインポートでsetUpメソッドを作成する

${:import(org.junit.Before)}
@Before
public final void setUp() {
  ${cursor}
}

@Test importで新しいテストメソッドを作成します

${:import(org.junit.Test)}
@Test
public final void test${newName} () {
${cursor}
}

型と DTO の間のJAXB変換を支援するために、以下を使用します。

既存の変数を戻り値の型に変換するためのテンプレート(パラメータと連動)

${return_type} ${name} = null;

if (${var} != null) {
    ${name} = new ${return_type}();
    ${cursor}
}
return ${name};
0
Gaʀʀʏ

配列からベクトルへ

${array_type}[] ${v:var(Vector)}Array = new ${array_type}[${v}.size()];
${v}.copyInto(${v}Array);
0
aeracode

新しいJUnitテスト方法

 @${testType:newType(org.junit.Test)}
 public void ${testname}() throws Exception {
     ${staticImport:importStatic('org.junit.Assert.*')}${cursor}

     String expected = "" ;
     String actual = "" ;

     Assert.assertEquals(expected, actual);
}
0
Burhan ARAS

これはオブジェクト全体を表示します(log4j LOGGERオブジェクトを既に起動していると仮定します)。

  ${:import(org.codehaus.jackson.map.ObjectMapper)}
  // If check to avoid argument evaluation costs
  if (LOGGER.isDebugEnabled()) {
        try {
            LOGGER.debug("Object ${Object}: " + "\n"
                + new ObjectMapper().writeValueAsString(${Object}));
        } catch (JsonGenerationException e) {
            LOGGER.info(e.toString());
        } catch (JsonMappingException e) {
            LOGGER.info(e.toString());
        } catch (IOException e) {
            LOGGER.info(e.toString());
        }
  }
0
Gautam