【问题标题】:do you have to make class static if no non-static class members? [duplicate]如果没有非静态类成员,你必须使类静态吗? [复制]
【发布时间】:2017-10-14 17:00:08
【问题描述】:

如果类没有任何非静态类成员,将类中的所有方法设为静态是否是一种好习惯? 就像某种没有自己的实例变量的管理器一样。

【问题讨论】:

  • 实际上,我认为最好不要将此类的所有方法都设为静态。但我认为这是一个见仁见智的问题。如果有人提出相反的观点,我不会太惊讶。
  • 请注意,静态方法不能实现接口。您可能希望您的类实现一个接口,即使它缺少实例字段。
  • @Andy 好点。即 java.lang.Runnable 接口 docs.oracle.com/javase/7/docs/api/java/lang/Runnable.html 所以实例可以在线程上执行。

标签: java variables methods static instance


【解决方案1】:

如果类永远不会有实例,那么所有方法都应该是静态的,这将是调用它们的唯一方法(你不能这样做myInst.myFunc(),因为myInst 不存在)。

这可能是相关的:Static Classes In Java

Math 示例是一个很好的示例,如果必须这样做会令人困惑

Math myCalculator = new Math()
myCalculator.multiply(x,y);

除非myCalculator 对 PI、E 等有不同的定义。

简而言之,是的,一个没有非静态成员的类应该只有静态方法

编辑:安迪·托马斯提出了一个很好的观点

您的Math 可能实现Multiplies 接口,因为它可以将两个东西相乘。同时,我的MultiplierAndAdder 类(我知道这是一个糟糕的类,但举个例子)也实现了Multiplies。在这种情况下,方法必须是非静态的,并且您必须实例化一个实例才能将其传递给将要使用它的任何对象。

界面逻辑一直在我的脑海中(正如教授所教导的那样):方钉,圆孔。如果你想穿过圆孔,你必须是圆的。如果你不存在,你就不是圆的,你不能穿过这个洞。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多