我最近看到一些代码,其中在抽象类
中定义了一个公共静态方法
。我想知道这是否被认为是良好的实践还是反模式?
我编写了一个简单的示例程序来说明我的意思。
public abstract class StaticMethodsInAbstractClassesStudy {
public static int adder(int a, int b){
return a + b;
}
}
public class StaticMethodsInClassesStudy {
public static void main(String [] args){
System.out.println(StaticMethodsInAbstractClassesStudy.adder(2, 3));
}
}
运行代码后,你会得到
5
的结果,这证明我能够在抽象类
中运行代码。故意没有向
StaticMethodsInClassesStudy
添加extends
,以强调可以直接在抽象类
中运行代码而无需实例化扩展类。个人认为这是一种不好的实践,因为你正在将一个
抽象类
用作普通类,从而绕过抽象类
的意图。这些方法应该放在单独的“普通”Java类中,例如实用程序类。
static
方法不会被继承,因此不能被子类重写。如果您打算让它被重写,则不能使用static
,如果您不希望它被重写,则final
比static
更明确地实现了这一点。 - JonKjava.lang.Math
吗?)静态方法本质上是无状态的,因此是纯函数式的(如果不是这样,也就是说,当涉及到静态字段时,那么几乎总是糟糕的...)。在一个abstract
类中拥有一个public static
方法可能有点不寻常,但仍然可能存在正当的情况。相关的,参考protected abstract
:https://dev59.com/_mAf5IYBdhLWcg3wyVB1 - Marco13