访问匿名类的构造函数

假设我有一个具体的类 Class1,并且我正在从中创建一个匿名类。

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

现在有什么办法可以重载这个匿名类的构造函数。如下所示

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

在xxxxxx使用某些东西来命名构造函数?


答案 1

来自 Java 语言规范的第 15.9.5.1 节:

匿名类不能具有显式声明的构造函数。

对不起:(

编辑:作为替代方法,您可以创建一些最终的局部变量,和/或在匿名类中包含实例初始值设定项。例如:

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

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

这很肮脏,但它可能只是帮助你。或者,使用适当的嵌套类:)


答案 2

这是不可能的,但您可以添加一个匿名初始值设定项,如下所示:

final int anInt = ...;
Object a = new Class1()
{
  {
    System.out.println(anInt);
  }

  void someNewMethod() {
  }
};

不要忘记匿名类使用的局部变量或参数的声明的最终结果,就像我对anInt所做的那样。