<分区>
我最近从一个视频中了解到,如果出于性能原因,Java 类的所有方法都是静态的,那么将其转换为抽象类是一种很好的做法。
谁能解释一下为什么会这样?
<分区>
我最近从一个视频中了解到,如果出于性能原因,Java 类的所有方法都是静态的,那么将其转换为抽象类是一种很好的做法。
谁能解释一下为什么会这样?
最佳答案
这可能会阻止人们创建该类的实例。 Java 代码预计会创建大量短期有用的对象并被垃圾回收,因此很难说这是一种实质性的性能提升。它似乎更像是一种传达类(class)背后意图的方式。
另一种选择是,不要将类设为抽象类,而是将类设为最终类。这是 JDK 代码中采用的方法,例如 java.lang.Math:
public final class Math {
/**
* Don't let anyone instantiate this class.
*/
private Math() {}
使用这些方法中的任何一种,您都应该为类提供私有(private)构造函数。这可以防止任何人对其进行实例化,并清楚地表明该类的目的是为静态方法提供一个家。这里的缺点是代码覆盖工具倾向于将构造函数报告为未覆盖。
从 Java 8 开始,第三种选择是将静态方法放在接口(interface)上。任何具有非默认实现的方法都被假定为静态方法。这种方法的优点是没有构造函数可以设为私有(private),并且代码覆盖工具会很高兴。
有了抽象类(但没有私有(private)构造函数)或接口(interface),也有可能扩展或实现该类型以使所有静态方法都可用而无需静态导入。 See this link for an example .使用 java.lang.Math 方法不是一种选择。
关于java - 抽象类中的静态方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65754423/