Ceylonではクラス名やインターフェイス別名で扱うことが出来ます。
#インターフェイスのエイリアス
interface Strings => Set<String>;
こんな感じで定義するとStringsと言う名前でSetが使えます。
継承している訳ではないのでダウンキャストとする訳ではないので
それぞれの型の変数に相互に入れることが出来ます。
こんな感じで。
variable Set<String> set1 = LazySet {};
Strings set2 = set1;
set1 = set2;
まあ、あまりに入り交じってしまうと
エイリアスを定義してる意味がなくなってしまうかもしれませんけど。
#クラスのエイリアス
class StringList({String*} strs) => LazyList<String>(strs);
クラスのエイリアスはこんな感じです。
コンストラクタなどの定義はそのまま引き継いで設定する必要があります。
#本当にエイリアス
Ceylonには本当にaliasというキーワードがあります。
使い方はこんな感じ。
alias Strings => List<String>; // インターフェイスのエイリアス
alias Strings2 => LazyList<String>; // クラスのエイリアス
クラスはコンストラクタのパラメータをセットする必要がなくなったので
ちょっと手軽になったかも。
インターフェイスの別名の違いは
interfaceのキーワードでは1つのインターフェイスしか指定出来ませんが、
aliasでは合成型を指定することが出来ます。
単純に別名を付けるときはこっちの方が良いかも?
#まとめ
エイリアスの利用イメージはつきましたか?
スコープも合わせて考えれば便利?
そんな感じでした。
便利な使い方とか実践的な使い方の例とかがあったらぜひ教えて下さい。