Каков синтаксис для вызова статического типизированного метода при выполнении статического импорта? - PullRequest
4 голосов
/ 03 января 2012

В настоящее время я делаю

import org.easymock.EasyMock;
...
foo.bar(EasyMock.<List<String>>anyObject());

Интересно, есть ли способ избежать упоминания класса EasyMock. Я имею в виду нечто подобное:

import static org.easymock.EasyMock.anyObject;
...
foo.bar(anyObject<List<String>>());

, который, однако, не компилируется. Есть ли другой способ сделать это?

Ответы [ 3 ]

6 голосов
/ 03 января 2012

Невозможно предоставить аргументы типа статически импортированным методам (без включения имени класса, как вы делали в своем первом фрагменте).Такой синтаксис просто не поддерживается.

См. Раздел 15.12, Выражения вызова метода в спецификации языка Java:

MethodInvocation:
        MethodName ( ArgumentListopt )
        Primary . NonWildTypeArgumentsopt Identifier (ArgumentListopt)
        super . NonWildTypeArgumentsopt Identifier (ArgumentListopt)
        ClassName . super . NonWildTypeArgumentsopt Identifier (ArgumentListopt)
        TypeName . NonWildTypeArguments Identifier (ArgumentListopt)

Первый вариант - единственный, которыйне включает в себя предыдущую точку, и эта не включает в себя возможность предоставить аргументы типа (как и другие).

1 голос
/ 03 января 2012

Нет такого синтаксиса.Однако вы можете присвоить значение некоторой переменной, чтобы java определял тип для вас.К сожалению, он не даст вам более читаемый код.

0 голосов
/ 03 января 2012

Я использую

import static org.easymock.EasyMock.anyObject;
...
foo.bar((List<String>) anyObject());
...