Java

SLF4J でログを吐く Java ライブラリは slf4j-api に compile スコープで依存するべき

eller さんが、ライブラリの作者はSLF4J のバインディングのみならず API も compile スコープの依存先から除くべきという趣旨のことを書いていました。前半はその通りだけど後半は違うのでは?と思い、そのようにコメントしたのですが、もう少し詳細を書い…

Java のリフレクションで super.method(...) 相当の呼び出しはできない

下の例のように super.メソッド名(...) とすると親クラスのメソッドが呼べますが、リフレクション経由では同じようにできないことが分かりました。 class Parent { public void bang() { System.out.println("Parent.bang!"); } } class Child extends Paren…

Lambda 式に invokedynamic を使うのかもしれない話

さきほどの記事で Lambda 式を「構文糖」と書きましたが、実はそうじゃないのかもしれません。 Java 7 で追加された invokedynamic 命令を使って、 Lambda 式の実行を効率化する、という話があるからです。以下、 Brian Goetz の From Lambdas to Bytecode …

JJUG Night Seminar: Java 8 Lambda 式ハンズオンのまとめ

25 日の JJUG Night Seminar は Java 8 で導入が予定されている Lambda 式のハンズオンでした。内容と所感をまとめておきます。なお、記述内容はハンズオン時の最新ビルド (lambda-8-b48-linux-i586-12_jul_2012) に基づくものです。 Lambda 式の仕様は未確…

Java 7 の Fork/Join で 並列マージソート & クイックソート

Java 6 までの Concurrency Framework の主役は、 Executor です。Executor を使うと、 非同期処理や複数セッション処理の並列化を、効率的に実装することができます。Java 7 では、 Fork/Join という新しい仕組みが登場します。これは、 Executor とは異な…

PermGenが枯渇する前にかならずFullGCが起きるとは限らない

クラスローダリークのテストを走らせていたらOutOfMemoryError/PermGen spaceが出たので、リークだ、嫌だなあと思ったんだけど、ヒープダンプを見てみると、ルートにたどり着けないインスタンスがたくさんあった。試しにループの合間にSystem.gc()を挟んでみ…

hamcrestでClass型のインスタンスをマッチする

hamcrestで何度かひっかかったので、覚え書く。 @Test public void can_load_string_class() { Class< ? > klass = Reflection.loadClass( "java.lang.String" ); assertThat( klass , is( String.class ) ); } // テスト失敗: // Expected: is an instance …

任意の型の配列かコレクションを新しいリストにコピーする

配列で苦労した。java.lang.reflect.Arrayなんて知らないよ。 import java.util.Collection; import java.util.List; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.lang.reflect.Array; public class T…