【问题标题】:What is the syntax for calling a static typed method while doing a import static?在进行导入静态时调用静态类型化方法的语法是什么?
【发布时间】:2012-01-03 07:54:11
【问题描述】:

目前我在做

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

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

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

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

【问题讨论】:

  • 嗯……应该可以的。什么是编译错误?

标签: java syntax static static-import


【解决方案1】:

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

请参阅 Java 语言规范中的 Section 15.12, Method Invocation Expressions

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      我用

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

      【讨论】:

      • 也许这应该改进为foo.bar((&lt;List&lt;String&gt;&gt;) anyObject());,按照原帖?
      • 这与显式提供类型参数不同,对吧?例如,如果anyObject 返回void 会怎样?
      • @aioobe,确实不是,但至少在这种特定情况下它有效。正如你所指出的,没有通用的解决方案。
      • 你怎么能说它在这种特定情况下有效?如果barString 作为参数怎么办?
      • 我不知道确实如此,但是您的帖子的输入方式与原始帖子 List&lt;String&gt; 而不是 &lt;List&lt;String&gt;&gt; 不同,因此是我的问题,而不是我断言应该更改它。
      猜你喜欢
      • 2012-10-12
      • 1970-01-01
      • 2016-12-23
      • 2015-11-13
      • 1970-01-01
      • 2010-09-30
      • 2011-07-11
      • 2011-12-11
      相关资源
      最近更新 更多