【发布时间】:2012-01-23 13:11:59
【问题描述】:
通过实验,我发现即使在静态上下文中,Java 非静态方法也会覆盖范围内所有相同命名的方法。即使不允许参数重载。喜欢
import java.util.Arrays;
import static java.util.Arrays.toString;
public class A {
public static void bar(Object... args) {
Arrays.toString(args);
toString(args); //toString() in java.lang.Object cannot be applied to (java.lang.Object[])
}
}
我在规范中找不到任何关于此的信息。这是一个错误吗?如果不是,是否有任何理由实现这样的语言?
UPD:Java 6 不编译此示例。问题是 - 为什么?
【问题讨论】:
-
好像是指它的super的Object的
toString() -
恕我直言,整个静态导入功能是一个糟糕的概念,会污染命名空间并破坏代码的可读性。不要偷懒,键入静态函数的封闭类/接口并不难,我们有 IDE。尽量避免使用静态导入。
-
@Jigar Joshi,它是如此接缝。但我找不到任何关于。而且,我们不能从静态上下文中调用
Object.toString,所以我看不出这种行为有任何逻辑。 -
@buc Meh。静态导入在许多情况下都非常好,并且可以大大提高可读性。我无法想象在没有它们的情况下使用模拟库;那将是一场暴行。
-
@Dave 我同意,您只需要了解其中的陷阱 - 因为这些可能很糟糕。在这种情况下,它并没有那么糟糕,因为我们只是得到了一个编译错误,但在最坏的情况下,我们可能会调用错误的函数,这肯定会使调试变得有趣。
标签: java scope language-design overloading static-import