LoginSignup
0
0

More than 5 years have passed since last update.

Ceylonのクラスのメタデータなどの取得(リフレクション)

Posted at

Ceylonでのクラス情報を取得などをやってみます。

Javaで言うとリフレクションなどですね。

以前の回で作ったカウンタークラスを参照してみます。


class Counter(variable Integer i) {

    shared Integer add() {
        return i++;
    }
    shared Integer nowCount {
        return i;
    }
}

クラスのメタ情報を参照するときにはこんな感じ



void classRef() {

    ClassDeclaration counterClass = `class Counter`;

    print(counterClass);

    for(m in counterClass.memberDeclarations<FunctionDeclaration>()) {
    print(m);
    }
}


ClassDeclarationでクラスで定義されている関数やパラメータなどを取得できます。
クラスをバッククオートで囲ってやるとClassDeclarationとして取得することが出来ます。
もちろん宣言されていないクラスなどをしていするとちゃんとコンパイルエラーになってくれます。

関数の情報のときにはこうです


    FunctionDeclaration counterAddMethod = `function Counter.add`;

classがfunctionになっただけですね。

まとめ

こんな感じでクラスのメタデータを使った処理は
フレームワークなどを作るときには使うんじゃないでしょうか。

普通の業務ロジックで使いだすと黒魔術的になってしまい
静的型付言語としての意味がなくなってしまうので
使いどころは絞って使って行きましょうー。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0