在Java中从主类访问静态内部类中的静态方法后,Eclipse会发出警告。

3

我有一个类 -->

    public class Machine

这里我声明了一个静态内部类 -->

   public static class Parts

我在静态内部类中声明了两个静态方法 -->

    public static void engine()
    public static void battery()

现在我想从我的主类App中访问方法。我正在使用Eclipse IDE。我做了以下操作 -
    Machine.Parts machine = new Machine.Parts();
    machine.engine();
    machine.battery();

Eclipse让我这么做。但是它会给出警告:
应该以静态方式访问类型Machine.Parts的静态方法engine
应该以静态方式访问类型Machine.Parts的静态方法engine

如何解决这个问题?
我已经尝试过谷歌搜索和Stack Overflow之前的问题,但是我无法找到解决方案。
我的代码 -

Machine.java -->
package demo28;

public class Machine {

    public static class Parts {
        public static void engine() {
            System.out.println("Machine engine is running");
        }
        public static void battery() {
            System.out.println("Machine battery is charging");
        }
    }
}

App.java -->

package demo28;

public class App {

    public static void main(String[] args) {
        run(new Machine.Parts());
    }

    public static void run(Machine.Parts machine) {
        machine.engine();
        machine.battery();
        System.out.println();
    }

}

输出 -->

机器引擎正在运行
机器电池正在充电

期望结果 --> 没有警告

实际结果 --> 收到警告


2
以静态方式访问的示例:Machine.Parts.engine()(您直接在类上调用方法,而不是在类的实例上调用)。 - Arnaud
首先,警告不是错误。其次,请阅读警告。如果您知道“静态”的含义,那么该警告的含义应该对您来说很清楚。 - Stultuske
静态方法不需要实例化新对象。因此,调用 Machine.Parts.engine() 是访问它们的正常方式,尽管不是必需的。警告只是为了让您检查设计,因为您当前正在以“非标准”的方式使用代码。 - Zephyr
1个回答

3

在这里:

 Machine.Parts machine = new Machine.Parts();

您正在创建该内部类的实例。然后,您进行以下操作:

 machine.engine();

...调用一个静态方法,就好像它是该类的非静态方法。

是的,上面的代码可以运行,但这是不良的实践。如果你想要“真正”的非静态方法,只需从方法签名中删除关键字即可。否则,请更改你的代码为:

Machine.Parts.engine();

因为这就是您代码示例中真正发生的事情。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接