ジェネリクスのMultiple Boundsを使ったコードをデコンパイルしてみた
Multiple Boundsを日本語にするとなんだろう?多重境界?
Java Generics and Collections: Speed Up the Java Development Processの「3.6 Multiple Bounds」の章に次のコードがあります。
public static <S extends Readable & Closeable, T extends Appendable & Closeable> void copy( S src, T trg, int size) throws IOException { CharBuffer buf = CharBuffer.allocate(size); int i = src.read(buf); while (i >= 0) { buf.flip(); trg.append(buf); buf.clear(); i = src.read(buf); } src.close(); trg.close(); }
型変数の宣言部分がポイント。&を使って複数の上限を指定しています。
これ、イレイジャがかかるとどうなるのだろうと思ってjadを使ってデコンパイルしみました。
こうなりました。
public static void copy(Readable src, Appendable trg, int size) throws IOException { CharBuffer buf = CharBuffer.allocate(size); for(int i = src.read(buf); i >= 0; i = src.read(buf)) { buf.flip(); trg.append(buf); buf.clear(); } ((Closeable)src).close(); ((Closeable)trg).close(); }
メソッドのパラメータでは最初の型で受けて、2番目以降の型を使うところではキャストしてました。なるほどなぁ。