0

浏览 Java 的 Play 文档,我注意到以下代码块:

public static Result show(Long id) {
  Client client = Client.findById(id);
  return ok(views.html.Client.show(client));
}

来源:http ://www.playframework.com/documentation/2.1.0/JavaRouting

我在理解第二行时遇到了一些麻烦,我对 Java 对象创建的理解是一个典型的构造函数,如下所示:

Person john = new Person();

第二行在做什么?从名为Client的类创建一个名为client的对象,什么是Client?它似乎不是 Play Framework 的一部分,当然我在 JavaDocs 中找不到任何东西。

谢谢

编辑:

我发现这是答案的一个很好的参考点(http://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html

另外我认为 Client 类来自以下文档(http://www.playframework.com/documentation/1.1.1/controllers),其中 Client 只是一个示例模型类,新文档可能需要更新以消除这种混乱.

4

3 回答 3

0

必须有一个在返回某个对象的类上static调用的方法。该对象被传递给一个方法,该方法返回一个对象。show(Client)views.html.Clientok(whatever)okResult

于 2013-04-01T20:59:51.403 回答
0

很明显,该类Client有一个静态函数findById,它接受 aLong并返回 a Client。静态函数是在不访问对象属性的情况下定义的函数,因此可以通过类名访问,而不必通过对象访问。最有可能的是,该类有一个静态属性,其中包含系统中所有客户端的集合(按索引),并从该列表中获取findById一个现有的。Client

但是,我真的不知道该类Client的定义在哪里。我也快速浏览了一下,在明显的地方找不到它。

于 2013-04-01T21:09:34.537 回答
0

您缺少一些基本知识/经验。您提供的示例与此代码段无关,routes在此代码段中只有第一行很重要,第二行只是一些假设的用法。事实上,它可能只是...

public static Result show(Long id) {
  return ok("You want to display details of client with ID: " + id);
} 

尽管@BenBarden 正确解释了这是什么意思,但此静态方法并未在任何地方声明,它(再次)是某些 ORM 的假设用法。例如,Ebean 模型的实际用法是:

Client = Client.find.byId(id);

当然,您也可以在Client模型中声明自己的方法并将其命名为与示例中相同的名称,但它只是包装器:

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

public Client findById(Long id) {
    return find.byId(id);
}

结论

  • 您需要检查您的 Play 源中可用的一些示例,以熟悉一些基本语法,幸运的是您会发现它很容易。
  • 不要将 Play 1.x 中的文档与 Play 2.x 混合使用,它们兼容!
于 2013-04-02T07:32:18.107 回答