Java 7 Diamond Operation в вызове метода

Это своего рода следующий вопрос из обсуждения:

Почему оператор ромба не работает внутри addAll () в Java 7?

Из Руководства по Java,

http://docs.oracle.com/javase/tutorial/java/generics/gentypeinference.html

Обратите внимание, что ромб часто работает в вызовы методов; однако для большей ясности рекомендуется использовать ромб в первую очередь для инициализации переменной, в которой он объявлен

Итак, меня немного смущает первая строка. Когда алмаз работает в вызовах методов?

Более подробное объяснение того, как работает алмазный оператор, можно найти здесь:

http://www.angelikalanger.com/GenericsFAQ/FAQSections/TechnicalDetails.html # What% 20is% 20type% 20argument% 20inference% 20for% 20constructors ?

И из этого я попробовал следующее, которое отлично работает:

Дайте, что у меня есть:

private static class Box{
    public Box(T t){}
}
static void f(Box box){}

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

f(new Box<>(new Integer(10)));

Параметр типа при вызове конструктора в вызове метода f () выше выводится из аргумента конструктора (то есть Integer ).

Это то, что имеется в виду, когда в руководстве говорится

Обратите внимание, что алмаз часто работает в вызовах методов

Если нет, может ли кто-нибудь предоставить пример, где алмаз работает в методе позвонить?

9
задан Community 23 May 2017 в 12:01
поделиться