2006/02/23
Genericsの罠
Java1.5で、二つのValidatorを合成したValidatorのベースになるものを作ろうとして、
public class CompositValidator<L, R> implements Validator { Validator[] validators; public CompositValidator(String name) {
super(name);
validators = new Validator[2];
validators[0] = new L();
validators[1] = new R();
} public boolean validate(String arg) {
for (Validator validator : validators) {
if (!validator.validate(arg)) {
return false;
}
}
return true;
} }
と書いたら、コンパイラに拒否されました。
JavaのGenericsだと、コンパイル時に型パラメータが消されて実行時には型情報が残らないので、new Lとかできないんですな。
C++使いにはつらい言語です。Lを文字列化できれば、リフレクションでなんとかなるんですが、それも無理っぽいし。
- Category(s)
- 覚え書き
- The URL to Trackback this entry is:
- http://dev.ariel-networks.com/Members/anaka/generics306e7f60/tbping