在从java中的主类访问静态内部类中的静态方法之后,eclipse发出警告

在从java中的主类访问静态内部类中的静态方法之后,eclipse发出警告,java,eclipse,methods,inner-classes,static-classes,Java,Eclipse,Methods,Inner Classes,Static Classes,我有一门课--> 在这里,我声明了一个静态内部类--> 在静态内部类中,我声明了两个静态方法--> 现在我想从我的主类应用程序访问这些方法。我正在使用EclipseIDE。是的- Machine.Parts machine = new Machine.Parts(); machine.engine(); machine.battery(); Eclipse让我来做这件事。但它给了我警告- 静态方法从类型机器中删除引擎。应以静态方式访问零件 静态方法从类型机器中删除引擎。

我有一门课-->

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

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

现在我想从我的主类应用程序访问这些方法。我正在使用EclipseIDE。是的-

    Machine.Parts machine = new Machine.Parts();
    machine.engine();
    machine.battery();
Eclipse让我来做这件事。但它给了我警告-
静态方法从类型机器中删除引擎。应以静态方式访问零件
静态方法从类型机器中删除引擎。应以静态方式访问零件

如何解决这个问题?

我尝试过谷歌搜索和堆栈溢出之前的问题。但我找不到解决办法

我的代码-

Machine.java-->

App.java-->

输出-->

机器发动机正在运行
机器电池正在充电

预期-->无警告

实际-->获取警告

此处:

 Machine.Parts machine = new Machine.Parts();
您正在创建该内部类的实例。然后你去:

 machine.engine();
。。。调用一个静态方法,就好像它是该类的非静态方法一样

是的,上面的代码是有效的,但这是一种不好的做法。如果您想拥有“真正的”非静态方法,只需从方法签名中删除该关键字即可。否则,请将代码更改为:

Machine.Parts.engine();

因为这就是代码示例中实际发生的情况

以静态方式访问是,例如:
Machine.Parts.engine()
(您直接在类上调用方法,而不是在类的实例上调用方法)。首先,警告不是错误。第二:阅读警告。如果您知道“static”是什么意思,那么您应该清楚该警告的含义静态方法不需要实例化新对象。因此,调用
Machine.Parts.engine()
将是访问它们的正常方式,尽管不是必需的。该警告只是为了让您在当前以“非标准”方式使用代码时检查设计。
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");
        }
    }
}
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();
    }

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