バグの出にくい言語仕様を考える2
■ このスレッドは過去ログ倉庫に格納されています
0326デフォルトの名無しさん
2006/02/08(水) 04:35:32annotation HasNameAndLargerThan(int i) applies Map {
null != this.get("name");
i < (int)this.get("length");
}
これはconstなメソッドという概念(この例だとMap#get())の存在が前提で、
実チェックはほとんど実行時。だけど宣言性はある。
//メソッド(関数)定義
void configure(Map@[HasNameAndLargerThanTen] conf) {
処理。
}
Map@[HasNameAndLargerThan(0)] m = new HashMap();//実行時エラー(コンパイル通っちゃう…)
List@[HasNameAndLargerThan(0)] l = new LinkedList();//コンパイルエラー
Map n = new HashMap();
configure(n); //コンパイルエラー
Map o = new HashMap();
o.put("name", "puge");
o.put("length", 1);
configure(([HasNameAndLargerThan(0)])o);
Map p = new HashMap();
o.put("name", "puge");
o.put("length", 1);
Map@[HasNameAndLargerThan(0)] q = ([HasNameAndLargerThan(0)])o;
configure(q);
Map@[HasNameAndLargerThan(123)] r = ([HasNameAndLargerThan(123)])o;//実行時エラー
…キャスト可否の定義も要りそうだな…。
■ このスレッドは過去ログ倉庫に格納されています