Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
0
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

@newta

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

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になっただけですね。

まとめ

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

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
0
Help us understand the problem. What are the problem?