テンプレートとは?
EclipseでJavaのコードを書くとき、テンプレートを使えます。
Ctrl + Space
で呼び出せるやつです。
sysout
と入力してSystem.out.println();
へと変換するテンプレートがもっとも有名です。
テンプレートを、便利っぽい順番で全て紹介します。
ただし、
- SWT(使う人が少なそう)
- Javadoc(これは
<b></b>
だとかのタグを挿入できるだけなので解説が不要だろう)
は省略してあります。
各紹介項目のタイトルの文言を(途中まで)入力してCtrl + Space
で変換できます。
たとえば「foreach」なら、foreachと入力してCtrl + Space
です。
環境はEclipse IDE for Java DevelopersのEclipse Luna (4.4.1)です
私が普段使っているもの
foreach
for (int i : array) {
}
arrayという名前の配列ないしリストを宣言してあると、上のように、そのarrayを自動的に使用してくれます。
forからCtrl + Space
で
- 添え字(いわゆる
int i
)を使うfor文 -
Iterator
を使ってコレクションを回すfor文
も作れます。
Iterator
を使うfor文はこうなります
for (Iterator iterator = collection.iterator(); iterator.hasNext();) {
type type = (type) iterator.next();
}
Java8以降はラムダ式を使えるので使用頻度が下がるかもしれませんが、
配列なりリストなりを用意した後にforeachと入力してCtrl + Space
を押すだけで使えるので便利です。
sysout
System.out.println();
syserrでSystem.err.println();
に変換することもできます。
main
public static void main(String[] args) {
}
に変換できます。
public_method
public return_type name() {
}
とメソッドを作れます。
変換直後に戻り値の部分にフォーカスが当たっているので、戻り値の型はすぐに変換できます。
さらにtab
でメソッド名にフォーカスが当たるので、メソッド名もすぐに書き換えられます。
ちなみに戻り値の型にvoid
以外を指定しても自動的にreturn
文が追加されはしません。
簡単にreturn文を追加する方法としては、returnがないためにコンパイルエラーとなるはずなので、ショートカットのCtrl + .
でエラー箇所に飛んで、Ctrl + 1
でエラーの修正方法の候補が出るので、Add return statementを選べば、return文を追加できます。↓の画像です。
類似のテンプレートとして、
- public_static_method
- protected_method
- private_method
- private_static_method
があります。これらは、それぞれの名称の通りに修飾子が異なります。
private_methodには代替方法があって、
適当なメソッド名を入力してCtrl + Space
でprivateメソッドを作成できます。
この場合は、操作としてはCtrl + Space
ですが、Templateではなく、Java Proposalを使っていることになります。
知らなかったけど機会があったら使いたいもの
switch
switch (key) {
case value:
break;
default:
break;
}
私は、switchよりもif-elseを好んでいて、switch文の書き方をド忘れすることが多いので、次にswitch文を書くときに使おうと思います。
それがいつになるかはわかりませんが……。
switchを好まないのは、
- switchに渡された文字列がnullだったときの挙動
- 記号の使い方がほかの構文とちょっと異質に感じる(「:」の使い方(?))
という理由です。
instanceof
型を検査してキャストするコードです。
if (var instanceof type) {
type new_name = (type) var;
}
castと入力してからCtrl + Space
で下のようにキャスト部分だけのコードへと変換することもできます。
type new_name = (type) name;
toarray
先にList<String> list = new ArrayList<String>();
というリストがあったりすると、
(String[]) list.toArray(new String[list.size()])
となります。
この形に変換した直後はコンパイルエラーが出ていますが、単に
String[] a = (String[]) list.toArray(new String[list.size()]);
とイコールの左側を書いてやれば問題なく使えます。
tolistもほしい感じですが、ありません。
arraymerge
2つの配列をマージ。
arrayA、arrayBという2つの配列をすでに宣言してあると
int[] arrayA2 = new int[arrayA.length + arrayB.length];
System.arraycopy(arrayA, 0, arrayA2, 0, arrayA.length);
System.arraycopy(arrayB, 0, arrayA2, arrayA.length, arrayB.length);
とマージできます。
arrayadd
既存の配列よりも1長い配列を作成して、既存の配列をコピーして、末尾の要素に値を入れます。
List#addみたいなイメージです。
arrayという名前の配列をすでに宣言してあると、
int[] array2 = new int[array.length + 1];
System.arraycopy(array, 0, array2, 0, array.length);
array2[array.length] = args;
というコードに変換できます。
static_final
public static final String NAME = "";
となります。
周囲の定数の宣言をコピペできることが多いので、冷静に考えると意外と使えないヤツです。
while
先にboolean
のvar
という変数があったとしたら、下のように条件に使ってくれます。
while (condition) {
}
Enum
のwhile文やIterator
を使用するwhile文に変換することもできます。
doと入力してからCtrl + Space
でdo-whileへと変換できたりもします。
if
先にboolean
のvar
という変数があったとしたら、下のようにifの条件に使ってくれます。
if (var) {
}
- ifelse
- else
- elseif
というテンプレートもあります。名前の通り、elseだけを作ったり、elseifを作ったりできます。
test
@Test
public void testName() throws Exception {
}
JUnit4のテストメソッドです。
test3
public void testname() throws Exception {
}
JUnit3のテストメソッドです。
JUnit4との違いはアノテーションの有無です。JUnit3のテストメソッドは、メソッド名の先頭が「test」でなければいけないので、そうなっています。
AndroidアプリのJUnitのバージョンが3だった記憶があるので、その場合には出番があると思います。
#へぇ、と思ったけどたぶん一生使わないヤツ
new
type name = new type(arguments);
最初に型の部分にフォーカスが当たっているので、型はすぐに書き換えられます。
そこからtab
で変数名、引数を順次編集できます。
私はよく
new String();
と書いてからAlt + Shift + l
で
String string = new String();
を作っていますが、それよりもわずかに早いかもしれません。
Alt + Shift + l
はイコールの右辺を書いてあれば自動的に左辺を作ってくれて汎用性が高いのでおすすめのショートカットです。
lazy
if (name == null) {
name = new type(arguments);
}
return name;
シングルトンパターンの断片みたいなコードを作れます。
シングルトンパターンは、いくつかの実装例がWikipediaに載っていて勉強になりました。
runnable
new Runnable() {
public void run() {
}
}
ExecutorService
にsubmit
するRunnable
を作るのには使えそうです。
try
try {
} catch (Exception e) {
// TODO: handle exception
}
私は、とりあえず最初に処理内容を書いてから、try-catchが必要になってからはじめてtry-catchで囲うことが多いです。
このように、いきなりtry-catchから書き始めはしない人は多いんじゃないかなあ、と思います。
ちなみにcatchでcatch節だけを作ることもできます。
synchronized
synchronized (args) {
}
syまで入力してCtrl + Space
で候補の一番上にくると思います。
「synchronized」の綴りに自信がなかったり、めんどくさかったりすると、便利かもしれませんね。
systrace
System.out.println("TemplateTest.main()");
と「クラス名.メソッド名」をsysoutしてくれます。
単なる文字列なので、メソッド名を変更しても、この出力される文字列は自動的に変わりはしません。
動的にクラス名やメソッド名を取得してsysoutする方法があるので、私はそちらを使っています。
fall-through
//$FALL-THROUGH$
意図的にフォールスルーしていることをEclipseに教えるコメントです。
フォールスルーとは、switch文でbreakを抜かすあれのことだそうです(Wikipediaの解説)。
Eclipseを使っている時だけに意味があるコメントなので、あまり使いたくありませんね。
nls
//$NON-NLS-N$
Eclipseの設定によってハードコーディングされた文字列を検出して警告を出せるのですが、その警告を該当部分だけ黙らせるためのコメントです。
Eclipse特有のコメントなのであまり使いたくありませんね。
まとめ
配列の操作をするためのテンプレートが多いですね。
基本的にはList
を使いたいものですが、理由があって配列をいじりまわすときに、ちょうどこのあたりを面倒くさく感じることがあったので、役に立てられそうです。
テンプレートは自分で追加することもできるので、お気に入りの形式のログとかがあれば、追加しておくと便利です。
新規追加も含めて、テンプレート関連の設定は、設定ウィンドウのJava -> Editor -> Templatesで弄れます。
Ctrl + Space
でテンプレートを出せないときは、Java -> Editor -> Content Assist -> Advanced で「Template Proposal」のチェックが外れていると思います。