假设我有一个具体的类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节:
匿名类不能具有显式声明的构造函数.
对不起:(
编辑:作为替代方案,您可以创建一些最终的局部变量,和/或在匿名类中包含实例初始化程序.例如:
public class Test { public static void main(String[] args) throws Exception { final int fakeConstructorArg = 10; Object a = new Object() { { System.out.println("arg = " + fakeConstructorArg); } }; } }
这很糟糕,但它可能只对你有所帮助.或者,使用适当的嵌套类:)
这是不可能的,但你可以像这样添加一个匿名的初始化器:
final int anInt = ...; Object a = new Class1() { { System.out.println(anInt); } void someNewMethod() { } };
不要忘记最后对匿名类使用的局部变量或参数的声明,就像我为anInt所做的那样.
这是解决问题的另一种方法:
public class Test{ public static final void main(String...args){ new Thread(){ private String message = null; Thread initialise(String message){ this.message = message; return this; } public void run(){ System.out.println(message); } }.initialise(args[0]).start(); } }
我知道这个帖子太旧了,无法发布答案.但我仍然认为这是值得的.
虽然你不能有一个显式的构造函数,但如果你打算调用超类的构造函数,那么你需要做的就是以下内容.
StoredProcedure sp = new StoredProcedure(datasource, spName) { {// init code if there are any} };
这是StoredProcedure
通过传递a DataSource
和对象在Spring 中创建对象的示例String
.
所以底线是,如果你想创建一个匿名类并想要调用超类构造函数,那么创建一个带有与超类构造函数匹配的签名的匿名类.