6

以下に示すように、継承を使用して Grails でドメイン クラスをモデル化しました。

abstract class Profile{
}

class Team extends Profile{
}

class User extends Profile{
}

class B{
    static hasMany = [profiles: Profile]
}

コントローラーの後半で、クラス B からすべてのプロファイルを取得するときに、一部のプロファイルを Team または User にキャストしたいのですが、java.lang.ClassCastException または GroovyCastException を取得するためできません。それらはチームまたはユーザーとして保存されます (データベース内の属性クラスを使用)。私が試した方法は次のとおりです。

def team1 = b.profiles.toList()[0] as Team

def team1 = (Team)b.profiles.toList()[0]

動的言語では通常のように、型を記述せずに使用するだけで機能します。

def team1 = b.profiles.toList()[0]

しかし、どのクラスを使用しているのかわかりません。とにかく、親クラスを子にキャストするグルービーまたはゴームはありますか?

4

1 に答える 1

6

実際の G​​ORM/Hibernate インスタンスはプロキシされたオブジェクトであるため、答えは「いいえ」です。したがって、エンティティ クラスに直接キャストすることはできません。

とにかくこれは役立つかもしれません:

def team1 = b.profiles.toList()[0]
if(team1.instanceOf(Team)) {
    // I am an instance of Team
    // do something here.
}
于 2012-07-11T10:57:15.590 に答える