Причина действительно проста. Если вы используете пробелы вместо. Для цепочки вызовов методов, то:
a b c d //is parsed as a call to
(a.b(c))(d)
В вашем случае последние два параметра вызываются как (потому что d
это более одного параметра, d
, e
и f
скажем):
a b c(d, e, f) //is parsed as a call to
a.b(c(d, e, f))
т.е.. так же, как в первом случае. Однако вы хотите, чтобы звонок был:
(a b).c(d, e, f)
Что не то же самое!
a = new FileInputStream("test.txt")
b = getChannel
c = transferTo
d = new FileOutputStream("test-copy.txt") getChannel
e = 0
f = Long.MaxValue
Насколько я знаю, это не изменилось между 2.7 и 2.8!