1. ホーム

[解決済み】無名クラスのコンストラクタにアクセスする

2022-04-05 08:46:45

質問

例えば、具象クラス Class1 があり、そこから無名クラスを作成するとします。

Object a = new Class1(){
        void someNewMethod(){
        }
      };

さて、この無名クラスのコンストラクタをオーバーロードする方法はないでしょうか?以下に示すように

Object a = new Class1(){
        void someNewMethod(){
        }
        public XXXXXXXX(int a){
          super();
          System.out.println(a);
        }
      };

コンストラクタの名前にxxxxxxxxの何かで?

解決方法は?

からの Java言語仕様 15.9.5.1項を参照してください。

無名クラスは 明示的に宣言されたコンストラクタです。

すみません :(

EDIT: 別の方法として、いくつかの最終的なローカル変数を作成し、および/または匿名クラスのインスタンスのイニシャライザを含めることができます。例えば

public class Test {
    public static void main(String[] args) throws Exception {
        final int fakeConstructorArg = 10;

        Object a = new Object() {
            {
                System.out.println("arg = " + fakeConstructorArg);
            }
        };
    }
}

グロテスクですが、お役に立てるかもしれません。あるいは、きちんとしたネストされたクラスを使ってください :)