Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用java.util.Arrays.toString的静态导入?_Java_Compiler Errors_Overloading_Overload Resolution - Fatal编程技术网

如何使用java.util.Arrays.toString的静态导入?

如何使用java.util.Arrays.toString的静态导入?,java,compiler-errors,overloading,overload-resolution,Java,Compiler Errors,Overloading,Overload Resolution,考虑以下两个简单的java代码片段: import java.util.Arrays; class Okay { public static void main(String... args) { System.out.println(Arrays.toString(new int[0])); } } 这个很好用。但是如果我经常使用toString,我可能会倾向于使用静态导入,如下所示: import static java.util.Arrays.toStri

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

import java.util.Arrays;
class Okay {
    public static void main(String... args) {
        System.out.println(Arrays.toString(new int[0]));
    }
}
这个很好用。但是如果我经常使用toString,我可能会倾向于使用静态导入,如下所示:

import static java.util.Arrays.toString;
class DoesNotCompile {
    public static void main(String... args) {
        System.out.println(toString(new int[0]));
    }
}
如果我尝试这样做,Java会认为我试图从对象调用toString(),然后抱怨toString不带参数。这似乎很愚蠢:我使用的是静态方法,所以不应该考虑toString。(即使是在实例方法中,我觉得Java应该在这里得到正确的答案。)


有没有什么方法可以解决这个问题,或者如果这个名称已经被“接受”,静态导入就不起作用了?

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

[来自JLS 15.12,方法调用表达式]()(更具体地说,来自15.12.1,“确定要搜索的类或接口”)

  • 如果表单为MethodName,即仅为标识符,则:

    如果标识符以该名称出现在方法声明的范围内(§6.3,§6.4.1),则:

    • 如果有一个封闭类型声明,该方法是该声明的一个成员,那么让T作为最内部的类型声明。要搜索的类或接口是T

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

    • 否则,由于一个或多个静态导入或按需静态导入声明,方法声明可能在范围内。没有要搜索的类或接口,因为稍后将确定要调用的方法(§15.12.2.1)


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

名为
toString
的“最近”方法是您继承的方法,因此不是。但是,您始终可以在同一类或另一类中定义具有不同名称的方法,如
arrToStr
。是的,我定义了str(),但这似乎是一个恼人的解决办法。哇,太快了!我想知道为什么他们不把所有的东西都合并成一个大的快乐过载集。或者至少继续寻找,如果发现的东西找不到。也许他们认为这太复杂了,不值得这么做。哦,好吧。谢谢@MarkVY我得到的印象是,进口(和包装)是一个快速插销,而没有真正探索边缘案例。例如,仅仅存在默认包;嘿,我喜欢默认的软件包!这是我最喜欢的包裹!:)回复:ArrayList示例。。。这很烦人,但在实践中很少见,因为包名通常是小写的,而类名通常是大写的。但这一点是正确的。