繁体   English   中英

如何为 java.util.Arrays.toString 使用 static 导入?

[英]How to use a static import for java.util.Arrays.toString?

考虑以下两个简单的 java 代码片段:

import java.util.Arrays;
class Okay {
    public static void main(String... args) {
        System.out.println(Arrays.toString(new int[0]));
    }
}

这工作正常。 但如果我经常使用 toString,我可能会想使用 static 导入,如下所示:

import static java.util.Arrays.toString;
class DoesNotCompile {
    public static void main(String... args) {
        System.out.println(toString(new int[0]));
    }
}

如果我尝试这个,Java 认为我正在尝试从 Object 调用 toString(),然后抱怨 toString 不接受 arguments。 这似乎很愚蠢:我使用的是 static 方法,因此甚至不应该考虑 toString。 (即使在实例方法中,我觉得 Java 应该在这里得到正确的答案。)

有什么办法可以解决这个问题,或者如果该名称已经“采用”,static 导入是否不起作用?

不,没有办法解决这个问题。

[来自 JLS 15.12,方法调用表达式]( https://docs.oracle.com/javase/specs/jls/se14/html/jls-15.html#jls-15.12 )“。 Class 或搜索接口")

  • 如果form是MethodName,也就是只是一个Identifier,那么:

    如果标识符出现在具有该名称的方法声明的 scope 中(第 6.3 节、第 6.4.1 节),则:

    • 如果存在该方法是其成员的封闭类型声明,则令 T 为最里面的此类类型声明。 class 或搜索接口是 T。

      这种搜索策略称为“梳状规则”。 它有效地在嵌套类的超类层次结构中查找方法,然后在封闭的 class 及其超类层次结构中查找方法。 有关示例,请参见第 6.5.7.1 节。

    • 否则,由于一个或多个单静态导入或按需静态导入声明,方法声明可能在 scope 中。 没有 class 或搜索接口,因为要调用的方法稍后确定(第 15.12.2.1 节)。

因此,“本地”方法将始终在 static 导入之前匹配。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM