Sar*_*n M 212 java constructor overloading anonymous-types
假设我有一个具体的类Class1,我正在创建一个匿名类.
Object a = new Class1(){
void someNewMethod(){
}
};
Run Code Online (Sandbox Code Playgroud)
现在有什么方法可以重载这个匿名类的构造函数.如下图所示
Object a = new Class1(){
void someNewMethod(){
}
public XXXXXXXX(int a){
super();
System.out.println(a);
}
};
Run Code Online (Sandbox Code Playgroud)
用xxxxxxxx命名构造函数?
Jon*_*eet 272
从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);
}
};
}
}
Run Code Online (Sandbox Code Playgroud)
这很糟糕,但它可能只对你有所帮助.或者,使用适当的嵌套类:)
Arn*_*ter 96
这是不可能的,但你可以像这样添加一个匿名的初始化器:
final int anInt = ...;
Object a = new Class1()
{
{
System.out.println(anInt);
}
void someNewMethod() {
}
};
Run Code Online (Sandbox Code Playgroud)
不要忘记最后对匿名类使用的局部变量或参数的声明,就像我为anInt所做的那样.
Joe*_*tov 72
这是解决问题的另一种方法:
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();
}
}
Run Code Online (Sandbox Code Playgroud)
Thi*_*thi 13
我知道这个帖子太旧了,无法发布答案.但我仍然认为这是值得的.
虽然你不能有一个显式的构造函数,但如果你打算调用超类的构造函数,那么你需要做的就是以下内容.
StoredProcedure sp = new StoredProcedure(datasource, spName) {
{// init code if there are any}
};
Run Code Online (Sandbox Code Playgroud)
这是StoredProcedure通过传递a DataSource和对象在Spring 中创建对象的示例String.
所以底线是,如果你想创建一个匿名类并想要调用超类构造函数,那么创建一个带有与超类构造函数匹配的签名的匿名类.
| 归档时间: |
|
| 查看次数: |
107665 次 |
| 最近记录: |