2015-10-29 5 views
5

Приведен следующий Java Пример кода:Java порядок вызова метода с скованными методами

builder.something() 
     .somethingElse() 
     .somethingMore(builder.getSomething()); 

Гарантирует ли это в спецификации языка Java, что getSomething() вызывается после метода somethingElse() или является реализация Java разрешено изменить порядок выполнения?

ответ

5

JLS, Section 15.12.4, гарантирует, что целевая ссылка вычисляется до вычисления аргументов.

Во время выполнения вызова метода требуется пять шагов. Во-первых, целевая ссылка может быть вычислена. Во-вторых, вычисляются выражения аргументов. ...

somethingElse метод должен быть оценен во-первых, для вычисления целевой ссылки для метода somethingMore. Затем оценивается builder.getSomething() для подачи значения для параметра somethingMore. Затем можно выполнить somethingMore.

Из-за этого правила JVM не могут изменять порядок выполнения.

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