【问题标题】:After accessing static methods in static inner classes from main class in java, eclipse is giving warning从java中的主类访问静态内部类中的静态方法后,eclipse给出警告
【发布时间】:2020-01-25 16:23:40
【问题描述】:

我有课-->

    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 类型的静态方法引擎应该以静态方式访问
Machine.Parts 类型的静态方法引擎应该以静态方式访问

如何解决这个问题?

我已经尝试过谷歌搜索和堆栈溢出以前的问题。但我无处可寻。

我的代码 -

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();
    }

}

输出 -->

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

预期 --> 没有警告

实际 --> 收到警告

【问题讨论】:

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

标签: java eclipse methods inner-classes static-classes


【解决方案1】:

这里:

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

您正在创建该内部类的实例。然后你去:

 machine.engine();

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

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

Machine.Parts.engine();

因为在您的代码示例中真正会发生这种情况。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-31
    相关资源
    最近更新 更多