ジェネリクスの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番目以降の型を使うところではキャストしてました。なるほどなぁ。