0

有没有办法不描述 Play 中的每个模型?使用 Ebean 时,我最终在每个模型中编写了 Finder 的定义:

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

我通常也会根据情况声明所有方法,创建、删除、更新等等。

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 中使用带静态的泛型没有问题,但您必须了解您所处的范围。静态方法无法从定义它的类访问参数化类型,因为这需要类的实际实例。

一种想法可能是创建一个非静态辅助类,它只将一个类型参数(实体类型)和它的 .class 带入其构造函数,并创建查找器,并且可以具有实现常见操作的方法。然后在所有实体中创建一个静态实例。

于 2013-09-25T13:48:48.827 回答