バグの出にくい言語仕様を考える2
■ このスレッドは過去ログ倉庫に格納されています
0336デフォルトの名無しさん
2006/02/10(金) 01:08:53annotation DayOfWeek() about String { //言語機能enumに相当する定義
boolean be() {
return "SUN".equals(about) || "MON".equals(about) || "TUE".equals(以下略;
}
}
これで、静的に安全なEnumの出来上がり(定数定義もないと使い勝手がイマイチだけど)。
しかもただのenumに比べて、String[DayOfWeek] hoge(); ←こんなのがあったとき、print(hoge()); みたいにいきなり表示するとか、(この場合)Stringとして色々扱える。
//言語機能Genericsに相当する定義
annotation ElementType(Class t) about Container;//単に型パラメタの定義。
annotation Type(Class t) about Object { //オブジェクトが特定の型である事の定義
boolean be() { return t.isAssignableFrom(about.getClass()); }
}
interface List extends Container {//"Generics"の利用
Object@[Type(t)] get(List@[ElementType(t)] this, int index);
void set(List@[ElementType(t)] this, int index, Object@[Type(t)] newVar);
}
List@[ElementType(String.class)] strList = ([ElementType(String.class)]) new LinkedList();
String s = "aaaaa";
Object o = new Object();
Object os = "bbbbb";
strList.set(0, ([Type(String.class)])s);
strList.set(1, ([Type(String.class)])o); //←コンパイルエラー
strList.set(2, ([Type(String.class)])so);
こんな普通なら言語仕様に相当するものすら自分で作れるって事は、なんか相当いろいろスゴいことができる気がする。
>>335 opCastってキャストのオーバーロード? それって静的なルールを定義できるの?実行時の処理だけじゃなくて。
■ このスレッドは過去ログ倉庫に格納されています