2017-02-02 3 views
0

おかげさまで助けてくれてありがとう!静的ブロックを継承するクラスのJavaパターン

私は、すべての必要ないくつかのクラスが同じ静的なブロックが含まれているよう:

public class Class1 { 
    static { 
     changeState(); 
    } 

    ... 
} 

public class Class2 { 
    static { 
     changeState(); 
    } 

    ... 
} 

私は現在、唯一の言及静的なブロックを含んで抽象クラスを持って、他のクラスは、すべての拡張

public abstract class WithChangeState { 
    static { 
     changeState(); 
    } 
} 

public class Class1 extends WithChangeState {  
    ... 
} 

public class Class2 extends WithChangeState { 
    ... 
} 

これは正しいパターンのように「感じる」ことはありません。これを実現する他のよりエレガントな方法や正しい方法がありますか?ただ、今後の参考のため

+1

それの静的メソッドでユーティリティクラスを作成し、クラス名を使用してアクセス。 Java APIの良い例は、https://docs.oracle.com/javase/8/docs/api/java/lang/Math.htmlクラスです。 – Amit

+0

あなたはそれをやりました。あなたは静的ブロックを継承したいと思っていました。あなたは静的ブロックを継承しています。その問題は何ですか? – EJP

答えて

0

、私がやってしまったことはした

// utility class with a static method 
public abstract class ChangeState { 
    public static void initialize() { 
     changeState(); 
    } 
} 

// access it using Classname 
public class Class1 {  
    static { 
     ChangeState.initialize(); 
    } 
    ... 
} 

// access it using Classname 
public class Class2 { 
    static { 
     ChangeState.initialize(); 
    } 
    ... 
} 
+0

その点を見るのは難しいです。あなたがあなたの質問にあった以上に、あなたはそれがどのような改善を表していると思いますか? – EJP

+0

このソリューションで直面しているユースケースのシナリオはどれですか?つまり、 'static'メソッド' initialize'はコンストラクターのように見えますね。ですから、難解な 'static'メソッドではなく、基本的なOOPを使わないのはなぜですか? –

+0

複数のライブラリクラスにセキュリティプロバイダをインストールしたい。そのうちのいくつかはすでに抽象クラスを拡張しています。実装のセキュリティプロバイダへのアクセスが必要です。 – markw

関連する問題