一个只有静态方法的类应该是抽象的吗?

oad*_*ams 7 java

我有一个类,它提供了一组静态实用程序类型的方法.

一方面,我不希望该类能够被实例化.另一方面,我不想发送该类应该继承的信号(不是我认为它可能).

这个班级应该是抽象的吗?

mre*_*mre 12

创建类final并创建默认构造函数private,不提供任何public构造函数.这样,没有人可以将其子类化或创建它的实例.

  • 并且为了防止在构造函数中使用反射抛出RuntimeException来实例化它:D (10认同)

rge*_*man 6

不要声明abstract; 声明一个private构造函数,所以没有人,甚至是子类,都不能实例化你的实用程序类的实例.

你可以声明你的类final,虽然如果所有构造函数都是private,那么无论如何都没有人能够对它进行子类化.

要在另一个答案中借用Pshemo的注释,在构造函数中抛出一个RuntimeException,以防止AccessibleObject中的反射setAccessible方法允许实例化:

public class MyUtility
{
   private MyUtility()
   {
      throw new RuntimeException("Instantiation of MyUtility is not allowed!");
   }

   public static void utilityMethod()
   {
      // Your utility method here.
   }
}
Run Code Online (Sandbox Code Playgroud)