私はベストに説明しようとしています。静的コンテキストで特定のオブジェクトに汎用クラスを使用するにはどうすればよいですか?
私はPlay Framework 2を使用しています。私は多くのCRUDアクションを行います。それらのうちのいくつかは同一であるため、私はKISSとDRYをしたいと思います。最初に、list
、details
、create
、update
、delete
のメソッドを汎用オブジェクトと共に含む抽象クラスについて考えていました。
public abstract class CrudController extends Controller {
protected static Model.Finder<Long, Model> finder = null;
protected static Form<Model> form = null;
public static Result list() {
// some code here
}
public static Result details(Long id) {
// some code here
}
public static Result create() {
// some code here
}
public static Result update(Long id) {
// some code here
}
public static Result delete(Long id) {
// some code here
}
}
そしてCRUD使用するクラス::私は、静的コンテキストではなかった場合、これは動作します
public class Cities extends CrudController {
protected static Model.Finder<Long, City> finder = City.find;
protected static Form<City> form = form(City.class);
// I can override a method in order to change it's behavior :
public static Result list() {
// some different code here, like adding some where condition
}
}
を(モデル&フォーム)を使用するオブジェクト。
しかし、それが原因で、どうすればいいですか?
単にインスタンスメソッドに切り替えるのはなぜですか?継承は、Javaのクラスメソッドでは機能しません。 – Vlad
継承をコンポジションに置き換えることもできます:CrudControllerのインスタンスを持って、そのインスタンスに含まれるオブジェクトに操作を委譲するだけです。 (これはすべてあなたのデザインに依存します) – Vlad
@Vlad:最初の質問では、再生できません。再生にはコントローラの静的メソッドが必要です。今度は第二に、私は理解していない、あなたは精巧な(または新しい答えを作る)ことができますか? –