Java以点开头的多个函数

时间:2014-09-04 08:12:18

标签: java

java中有一种我无法理解的语句,甚至没有通过谷歌搜索找到任何内容。我想分享一个我写的例子,但不理解语言结构:

MvcResult result = this.mockMvc.perform(MockMvcRequestBuilders.post("/user_sessions/first")
                .contentType(MediaType.APPLICATION_JSON)
                .content("{\"username\":\""+username+"\",\"password\":\""+password+"\"}"))
                .andExpect(MockMvcResultMatchers.status().isOk())
                .andReturn();

我不明白contentType,content,Expect和andReturn是什么。它们显然是功能,但我怎么能像这样称呼它们。他们属于哪个班级?总的来说,我对这里的结构非常困惑。

谢谢。

3 个答案:

答案 0 :(得分:5)

您在这里看到的被称为流畅的界面。流畅的接口是一种通过级联方法调用来帮助提高代码可读性的机制。当你创建一个方法时,返回值是类的返回值,因此在伪代码中,这将是 -

class Foo {
   private String baa;
   private String moo;
   public Foo setBaa( String baa ) {
     this.baa = baa;
     return this;
   }
   public Foo setMoo( String moo ) {
     this.moo = moo;
     return this;
   }
}

注意:使用this作为返回值来表明我们正在返回当前的foo实例。这将允许以下行为 -

Foo test = new Foo();
test.setBaa( "baa" ).setMoo( "moo" );

如果您想了解有关Fluent界面的更多信息,请查看http://en.wikipedia.org/wiki/Fluent_interface,其中提供了相当深入的解释。

答案 1 :(得分:1)

这样做是为了提高可读性。你也可以把它写成:

result = this.mockMvc.perform(MockMvcRequestBuilders.post("/user_sessions/first").contentType(MediaType.APPLICATION_JSON).content("{\"username\":\""+username+"\",\"password\":\""+password+"\"}")).andExpect(MockMvcResultMatchers.status().isOk()).andReturn();

所有这些方法都返回对象,并在返回的对象上调用以下方法。

答案 2 :(得分:0)

我认为你与你的代码段相混淆

MvcResult result = this.mockMvc.perform(MockMvcRequestBuilders.post("/user_sessions/first")
                .contentType(MediaType.APPLICATION_JSON)
                .content("{\"username\":\""+username+"\",\"password\":\""+password+"\"}"))
                .andExpect(MockMvcResultMatchers.status().isOk())
                .andReturn();

看一下它没有以semi colon结尾的第一行,这意味着该行没有被终止。

至于SURESH ATTA的回答。它是方法链接,它们都属于MvcResult并且取决于函数的返回类型。

你很困惑,每一行都以dot开头,然后是函数名。这可能是因为你的IDE的格式化程序。如果行太长,格式化程序会移动它下面的下一个函数。