java - 当类具有与导入方法同名的方法时,import static 不起作用

标签 java static-import

我有一个静态导入 org.junit.Assert.assertEquals 方法的 Junit4 测试用例。

import static org.junit.Assert.assertEquals;

在这个类中,我创建了一个实用方法来断言一些复杂的内部类,这些类没有实现 equals(并且也很难实现)。

private void assertEquals(MyObj o1, MyObj o2)
{
    assertEquals(o1.getSomething(), o2.getSomething());
    assertEquals(o1.getSomethingElse(), o2.getSomethingElse());
    ...
}

我希望代码的行为就像我正在“重载”我正在导入的 assertEquals 方法一样,但看起来我的私有(private)非静态方法正在隐藏 静态导入的方法。我还尝试将我的方法变为 publicstatic(所有排列)但没有成功 - 我不得不重命名它。

为什么会这样?我在文档中找不到任何关于此行为的引用。

最佳答案

您观察到的是调用 Shadowing .当 java 中的两个类型具有相同的简单名称时,其中一个将覆盖另一个。阴影类型不能通过它的简单名称使用。

最常见的阴影类型是隐藏字段的参数。通常导致 setter 代码看起来像 setMyInt(int myInt) {this.myInt = myInt; }

现在让我们阅读 relevant documentation :

A static-import-on-demand declaration never causes any other declaration to be shadowed.

这表明按需静态导入始终排在最后,因此任何与按需导入声明具有相同简单名称的类型将始终隐藏(隐藏)静态导入。

关于java - 当类具有与导入方法同名的方法时,import static 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6595980/

相关文章:

java - 我需要安装 opencv 并在 Maven+IntelliJ(在 Windows 和 macOS/OSX 上)中通过 java 使用它。

java - 在Java中创建自定义类,id是保留的还是可以在自己的类中使用id?

java - 减少 A4J JSF Richfaces 所需的 JavaScript 文件

c# - 引入静态方法

java - 方法静态导入的良好用例是什么?

java - 用Java编写一个简单的打印方法用于调试

java - Java-Sqlite 代码中的 Auto_increment ID

Java字正则表达式