0

Play のすべてのモデルを説明しない方法はありますか? Ebean を使用するとき、すべてのモデルで Finder の定義を書くことになります。

public static Finder<Long,Task> find = new Finder<Long,Task>(
    Long.class, Task.class
  );

また、状況に応じて、通常はメソッド all、create、delete、update などを宣言します。

public static List<Task> all() {
    return Task.find.all();
}

public static void create(Task task) {
    task.save();
}
...

このすべてのものを一度だけ定義して、モデルに別の機能が必要な場合は、それを必要とするモデルだけに再宣言することができるかどうか疑問に思っていました。ジェネリックCustomModelを使用してモデルの親クラスを宣言しようとしましたが、どうやらJavaはジェネリックメソッドが静的であることを好まないため、理解できます。それで、これは可能ですか?私は少し前にPHPでそれをしました。

私は一般的に Play と Java の初心者であり、誰かが私を助けてくれたらとても感謝しています。

君たちありがとう!

4

1 に答える 1

2

Java では型が消去されるため、Finder はコンパイル中に Long と Task を失い、実行時にそれらを認識できないため、このような抽象化を行うことが非常に難しくなります。

Java でジェネリックを静的に使用しても問題はありませんが、自分がどのスコープにいるのかを理解する必要があります。静的メソッドは、クラスの実際のインスタンスが必要になるため、定義されているクラスからパラメーター化された型にアクセスできません。

1 つのアイデアは、1 つの型パラメーター (エンティティ型) とそのコンストラクターへの .class のみを受け取り、ファインダーを作成し、共通の操作を実装するメソッドを持つことができる非静的ヘルパー クラスを作成することです。次に、すべてのエンティティ内にその静的インスタンスを作成します。

于 2013-09-25T13:48:48.827 に答える