3

java中的util类可以通过两种方式制作

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

并执行 util 方法

Utils.someUtilMethod(...);

或者我可以做

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

并执行 util 方法

new Utils().someUtilMethod(...)  

什么方法更好?这些方式之间有一些区别吗?

4

5 回答 5

11

通常 Util 类包含 Utility 方法,这些方法不需要存储 Object 的状态来处理,因此static方法很适合那里

于 2012-07-16T11:17:13.573 回答
2

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

后者几乎不应该发生,尽管像伪随机数生成器这样的东西可能是一个很好的例子。

这些Math函数是效用函数的一个很好的例子。当您调用时Math.sin(),结果取决于提供的参数。不涉及“状态”,因此无需创建对象。

于 2012-07-16T11:19:35.547 回答
1

静态访问将是一种更好的方法,因为在 Util 类中包含不关心对象属性的方法。

另一个例子是Math Class

  • 数学类没有实例变量

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

  • 因此,在 Math 类案例中,使用 Math.PI 之类的静态访问是合适的。

于 2012-07-16T11:20:28.343 回答
0

如果你使用一个只有静态方法的类,你就不需要在每次需要使用的时候实例化对象,节省了一行代码和一些内存。只要记住将默认构造函数设为私有,这样就不会有人无意中实例化它!

于 2012-07-16T11:20:23.597 回答
0

实用程序类只是在 Java 中在语法上保存全局函数的地方。

您的第二个示例未包含在“实用程序类”一词中。该概念的定义包括类的不可实例化。

拥有实例方法的原因是动态方法分派(以实现多态性),或者可能持有一些非全局状态。但是,正如我所说,那么您将超出“实用程序类”一词的范围。

于 2012-07-16T11:20:34.953 回答