あまりにマイナーでライブラリやフレームワークの紹介も出来ないので
ネタ切れになりそうですがアドベントしています。。
今回は合成型について。
たまーにですが2つの型を同じ入れ物に入れたいって時がありますよね?
そんなときはこんな感じで使えます。
List<String|Integer> list = LazyList{ 1, "two" , 3 };
「 | 」で結合するとその型を両方使うことを表すことが出来ます。
今回のコードではListにIntegerもStringも入れることが出来るようになります。
Javaであればこのようになってしまうと
List<Object> list;
のようにObjectになってしまいます。
Ceylonであればそんなことは無く、何の型が入るかはっきり表現することが出来ます。
さてListに入ったオブジェクトの使い方ですが、
このまま取り出すとそのオブジェクトがIntegerかStringにしぼられているとはいえ
どちらか分かりません。
なので使うときは以下のようになります。
for(e in list) {
if(is String e) {
// ここでStringのメソッドが使える
}
if(is Integer e) {
// ここでIntegerのメソッドが使える
}
}
はい。ちゃんと型チェックしてやる必要があります。
[こちらの記事] (http://qiita.com/newta/items/41d5bc6f25b0ba8d9cc6) でも書きました。
未チェックな人はチェックしてみてくださいー。
今回のListのケースは既に設計がイマイチ感がありますが
現場ではもっと適切に使える機会もありそうな合成型でした。