Java实用类

3

Java中的Util类可以有两种制作方式

class Utils  
{   
  public static ReturnType someUtilMethod(  
 // ...   
}    

并通过执行实用程序方法
Utils.someUtilMethod(...);

或者我可以制作
class Utils  
{  
  public Utils(){}     
  public ReturnType someUtilMethod(  
 // ...   
}  

并通过执行 util 方法进行操作

new Utils().someUtilMethod(...)  

哪种方式更好?这些方式之间有什么不同吗?
5个回答

11

通常Util类包含不需要存储对象状态以进行处理的实用程序方法,因此static方法很适合在那里使用。


2
+1 我会使用 public enum Utils {;} 来表示该类没有实例。 - Peter Lawrey
完全同意 - 没有任何理由使实用方法成为“非静态”的。此外,在使用“静态”方法的情况下,实用方法调用所需的时间和内存更少。 - Yuriy Nakonechnyy

2

一个实用函数应该始终是static的,除非由于某种原因它依赖于其他变量的状态,并且那些变量需要在调用之间记住。

后者几乎永远不会发生,尽管伪随机数生成器之类的东西可能是一个很好的例子。

Math函数是实用函数的一个很好的例子。当你调用Math.sin()时,结果仅取决于提供的参数。没有涉及“状态”,因此不需要创建对象。


1

静态访问将是更好的方法,因为Util类保存的方法与对象的属性无关。

另一个例子是Math类

  • Math类没有实例变量。

  • 并且有私有构造函数,因此不能创建对象。

  • 因此,在Math类中使用静态访问,如Math.PI是适当的。


0
如果您使用的是仅具有静态方法的类,则每次需要使用它时都不需要实例化对象,这样可以节省一行代码和一些内存。只需记住将默认构造函数设置为私有,以便没有人会无意中实例化它!

0

实用类是Java中保存全局函数语法的地方。

您的第二个示例不包括“实用类”这个术语。该概念的定义包括类的不可实例化性。

拥有实例方法的原因可能是动态方法调度(以实现多态),或可能保存一些非全局状态。但是,正如我所说,那么您将超出“实用类”这个术语的范围。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接