noteプログラミング関連2015-02-03匿名クラスとラムダ式で作られるクラスファイルの違いJava短いエントリーです。ご存知の方も多いと思いますが、従来RunnableやComparatorのような関数様パラメーターのメソッドローカル実装は匿名クラスで賄っていましたが、Java8からはラムダ式で書けるようになりました。匿名クラスは、エンクロージングクラス名+$1.class(例:App$1.class)のような名前でクラスファイルが作られます。数字は連番で、2つ目は$2.classとなります。ラムダ式は、エンクロージングクラスのクラスファイル内部に合成メソッドとして作成されます。メソッド名は、lambda$+エンクロージングメソッド名+$1(例:lambda$main$1)のような名前になります。数字が連番なのは同じです。それでは、実際に作成されるクラスファイルはどのような違いがあるのでしょうか。簡単なサンプルコードで試してみました。app.jar単純計算すると、1つの匿名クラス当たり400バイト減っています。これは、100の匿名クラスをラムダ式に置き換えたとしたら、39KB程度減る計算になります。サイズを減らすためにラムダ式を使うなんてことはまず無いと思いますが、なんとなく得した気分になるというお話でした。#java8Java8未満を切り捨てて色々と作ってみるシリーズ。以前、このような記事を書きました。(2)プロフィールid:argiusはてなブログをはじめよう!argiusさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。