2016-04-20 4 views
0

no way to enforce this at compile timeがあることは知っていますが、これは実行時にリフレクションを使用する方法があることを望んでいました。java:実行時にサブクラスにargコンストラクタを適用しない

+2

これは何ですか?あなたのプログラムはランタイム例外を伴ってエラーになりますか?コンストラクタが見つからず、あなたがそれを呼び出そうとした場合、どうなるでしょうか? – Thilo

+0

何かあれば、(ビルド中にFindbugsや単体テストを実行するのと同じように)クラス構造を検証できるカスタムビルドステップ(アノテーションでトリガされる可能性があります)を調べることができます。 http://stackoverflow.com/a/803433/14955 – Thilo

+0

この質問には疑問はありません。おそらくあなたはそれをする方法を尋ねたいですか? – immibis

答えて

2

あなたは反射して、それを明白な方法を行うことができます:

public class Superclass { 
    public Superclass() { 
     try { 
      // get the constructor with no arguments 
      this.getClass().getConstructor(); 
     } catch(ReflectiveOperationException e) { 
      throw new RuntimeException("Subclass doesn't have a no-argument constructor, or the constructor is not accessible", e); 
     } 
    } 
} 

(それが公開されている場合getConstructorだけコンストラクタを返すことに注意してください。あまりにもプライベートコンストラクタを許可するように、getDeclaredConstructorを使用します)。

+0

ReflectiveOperationException!それは新しい(そして非常に高く評価された)。 – Thilo

関連する問題