2016-07-14 7 views
3

私はutilとして動作しなければならないクラスを持っています。インスタンスは必要ありません。含まれているものはすべてstaticのメンバーとstaticの関数です。だからこそ、何をするのが最善の方法でしょうか? finalprivateのコンストラクタをjavaのMathクラスとして作成するか、コンストラクタをprivateにしますfinal? utilのクラスのutilとしてクラスを作る最も良い方法は?

+0

に、それはあまり問題ではないものは何でもええし、プライベートコンストラクタをインスタンス化することです。コンストラクタがプライベートであれば、それをサブクラス化することはできません。 –

+0

最終的なものではないがプライベートctorを持っている場合でも、内部静的クラスによってサブクラス化することができます。それが最終的なものであっても私的なものであっても、読者がその目的を伝えることがより容易になるので、私はそれを行うでしょう。 – flakes

+0

多少の複製:http://stackoverflow.com/questions/309553/should-helper-utility-classes-be-abstract and http://stackoverflow.com/questions/12538487/utility-class-what-is- the-correct-approachとhttp://stackoverflow.com/questions/25223553/how-can-i-create-an-utility-class – alexbt

答えて

1

privateコンストラクタは、によって、クラスfinalをマークする必要は十分ではありませんプライベートコンストラクタを持つことができません

コンストラクタをprivateにすると、まだreflectionを使ってアクセスできます。

より良いアプローチは、スローAssertionErrorコードの下

public class Util {  
    private Util() { 
     throw new AssertionError("Can't instantiate"); 
    } 
    // static methods 
} 

public class Test { 
    public static void main(String[] args) { 
     try { 
      Constructor<Util> utilC = Util.class.getDeclaredConstructor(); 
      utilC.setAccessible(true); 
      Util u = utilC.newInstance(); // instance   
     } catch (Exception e) { 
      // exception handling 
     } 
    } 
} 
0

、あなたが必要この関数は静的でconstructor.because、あなたはこのように使用することができます提供していない:Util.a()

+1

私は彼が静的メソッドの利点を知っていると確信しています。彼は、クラスを抽象的にするか、非公開のコンストラクタで非最終的にするかを考えています。彼は基本的にどちらがベストプラクティスと考えられているかを尋ねています。 – alexbt

+0

thanks.in私の意見では、クラスは静的メソッドを提供する場合は、プライベートコンストラクタを使用してより良い – Melody4java

関連する問題