2014-09-04 3 views
1

В 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, содержание, andExpect и andReturn есть. Они, очевидно, функционируют, но как я могу их так называть. В какой класс они принадлежат? Сверху меня очень путают со структурой здесь.

спасибо.

+0

Это называется цепочкой методов, метод 'append'' StringBuilder позволяет вам это сделать. В основном методы возвращают экземпляр 'MvcResult' (' return this'), который позволяет вам объединять вызовы методов. Он особенно популярен в шаблоне построителя и экономит массу ввода ... – MadProgrammer

+0

Вы вызываете 'contentType (...)' на результат 'this.mockMvc.perform (MockMvcRequestBuilders.post ("/user_sessions/first ") 'и т. д. и т. д. и т. д. – amit

ответ

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; 
    } 
} 

Примечания: использование этого в качестве возвращаемого значения, чтобы показать, что мы возвращаем наш текущий Foo пример. Это позволило бы folliwng поведение -

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

Если вы хотите получить более подробную информацию о Fluent интерфейсы, пожалуйста, посмотрите на http://en.wikipedia.org/wiki/Fluent_interface, который дает довольно углубленное объяснение.

+0

+1 Для того, чтобы указать, что« свободный интерфейс »является правильным термином для такого рода методов проектирования. Это более конкретная ситуация, когда простая цепочка методов. –

+0

Хотя в беглых интерфейсах это часто ** не является ** тем же классом, который возвращается. Чтобы выполнить шаг на разных этапах свободного интерфейса, возвращаются разные типы, чтобы предоставить различные варианты методов. –

1

Это сделано для лучшей читаемости. Вы могли бы также написать:

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

Все эти методы возвращают объекты и следующие методы вызываются на возвращенных объектов.

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. если линия слишком длинная, форматир перемещает следующую функцию под ней.

Смежные вопросы