4

目前我正在做

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

我想知道是否有办法避免提及 class EasyMock。我有这样的想法:

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

但是,它不能编译。还有其他方法吗?

4

3 回答 3

7

无法为静态导入的方法提供类型参数(不包括您在第一个片段中所做的类名)。根本没有这样的语法支持它。

请参阅第 15.12 节, Java 语言规范中的方法调用表达式:

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

第一个选项是唯一不涉及前面的点的选项,并且不包括提供类型参数的可能性(与其他选项一样)。

于 2012-01-03T08:05:08.837 回答
1

没有这样的语法。不过,您可以做的是为某个变量赋值,以便 java 为您推断类型。不幸的是,它不会给你更多可读的代码。

于 2012-01-03T08:21:04.590 回答
0

我用

import static org.easymock.EasyMock.anyObject;
...
foo.bar((List<String>) anyObject());
于 2012-01-03T08:09:59.217 回答