Helper/Utility Classes应该是抽象的吗?

shs*_*mer 45 java abstract-class

我经常发现自己将类中的常见行为提取到helper/utility类中,这些类只包含一组静态方法.我经常想知道我是否应该将这些类声明为抽象类,因为我无法真正想到实例化这些类的正当理由?

优点和缺点是宣布这样一个类是抽象的.

public [abstract] class Utilities{

   public static String getSomeData(){
       return "someData";
   }

   public static void doSomethingToObject(Object arg0){
   }
}
Run Code Online (Sandbox Code Playgroud)

Out*_*mer 73

你可以声明一个什么都不做的私有构造函数.

声明类"abstract"的问题在于abstract关键字通常意味着该类旨在进行子类化和扩展.这绝对不是你想要的.

  • 可悲的是,你无法宣布它是最终的抽象.:-) (10认同)
  • 并且可能宣布它是最终的,以使你的意图绝对清楚. (8认同)
  • 他并没有暗示他应该......:| (4认同)

Jon*_*eet 18

不要打扰它们是抽象的,而是包含一个私有的无参数构造函数来防止它们被实例化.

对于那些感兴趣的人来说比较点:在C#中你会声明这个类是静态的,使它在编译形式中是抽象的密封的(Java的最终版),而根本没有任何实例构造函数.这也使得声明该类型的参数,变量,数组等成为编译时错误.便利.


小智 9

我没有声明实用程序类抽象,我声明它们是final并使构造函数私有.这样它们就不能被子类化,也无法实例化.



public final class Utility
{
    private Utility(){}

    public static void doSomethingUseful()
    {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)