假设我有一个具体的类Class1,我正在用它创建一个匿名类。
Object a = new Class1(){
void someNewMethod(){
}
};
现在有没有办法重载这个匿名类的构造函数。如下图所示
Object a = new Class1(){
void someNewMethod(){
}
public XXXXXXXX(int a){
super();
System.out.println(a);
}
};
用xxxxxxxx来命名构造函数?
Peter Norvig的《Java IAQ:不常回答的问题》
http://norvig.com/java-iaq.html#constructors -匿名类构造函数
http://norvig.com/java-iaq.html#init -构造函数和初始化
加起来,你可以构造这样的东西。
public class ResultsBuilder {
Set<Result> errors;
Set<Result> warnings;
...
public Results<E> build() {
return new Results<E>() {
private Result[] errorsView;
private Result[] warningsView;
{
errorsView = ResultsBuilder.this.getErrors();
warningsView = ResultsBuilder.this.getWarnings();
}
public Result[] getErrors() {
return errorsView;
}
public Result[] getWarnings() {
return warningsView;
}
};
}
public Result[] getErrors() {
return !isEmpty(this.errors) ? errors.toArray(new Result[0]) : null;
}
public Result[] getWarnings() {
return !isEmpty(this.warnings) ? warnings.toArray(new Result[0]) : null;
}
}
我知道这个帖子太老了,不能发表答案。但我仍然认为这是值得的。
虽然不能使用显式构造函数,但如果您的意图是调用超类的一个可能受保护的构造函数,那么您必须执行以下操作。
StoredProcedure sp = new StoredProcedure(datasource, spName) {
{// init code if there are any}
};
这是一个通过传递DataSource和String对象在Spring中创建StoredProcedure对象的示例。
所以底线是,如果你想创建一个匿名类,并想调用超类构造函数,那么就创建一个签名与超类构造函数匹配的匿名类。