Daily Archives: 2009年7月18日

JavaのGenericsでnew T()ができない件の続き

JVMを変えずに糖衣構文で乗りきりたかったってのは分かるんだけど

public class Hoge<T> {
private void hoge() {
T t = new T();
t.foo();
}
}

みたいなコードがあった時に内部的に

abstract protected T __newT();
private void hoge() {
T t = __newT();
t.foo();
}

のように展開して、

Hoge<String> hoge;

とかされたら内部的に

class HogeImpl extends Hoge {
protected String __newT() { new String(); }
}
HogeImpl hoge;

みたいな糖衣構文で逃げてはいけなかった理由は何だったんだろう。

JavaのGenerics

new T()できないことを今知った。
いや以前それっぽい記述をどっかで見た気はしたけど猛烈にスルーしてた。
致命的じゃんこれ。どこがGenericだよ。
関数の入り口で型チェックしてくれて、出口でキャストしてくれる、という糖衣構文以外の何物でもないじゃないか。
ないわー