我可以在几个例子在网页上看到一个新的语法对我来说,这里是一个例子:理解语法
Accumulator<Integer> sum = new Accumulator<Integer>(){
public Integer accumulate(Integer t1, Integer t2) {
return t1+t2;
}
};
在一般情况下,这是什么意思,当一个制作的实例后写道{ a method }
一类?这是某种古老的语法吗?
谢谢
我可以在几个例子在网页上看到一个新的语法对我来说,这里是一个例子:理解语法
Accumulator<Integer> sum = new Accumulator<Integer>(){
public Integer accumulate(Integer t1, Integer t2) {
return t1+t2;
}
};
在一般情况下,这是什么意思,当一个制作的实例后写道{ a method }
一类?这是某种古老的语法吗?
谢谢
您正在创建一个匿名内部类。
new Accumulator<Integer>() {
@Override
public Integer accumulate(Integer t1, Integer t2) {
return t1 + t2;
}
};
定义了Accumulator
的匿名实现。然后,您继续将此匿名类的参考分配到sum
。
认为它是同时定义和分配实现的便捷方式。这是一个syntactic sugar。
不,这是一个匿名的内部类。它具有它的类型的接口或类的签名,但可以覆盖公共方法。
这是一个常用的匿名内部类。
报价“匿名类本质上是一个没有名字的本地类”。
它要么使用重载方法创建匿名子类,要么使用匿名接口实现(取决于Accululator是类还是接口)。
这是一个匿名类声明的例子。
Section 15.9.5Java Language Specification讨论了这些类型的声明。
这被称为匿名内部类,即没有名称的类,因此可以与其唯一的一个实例一起创建。当需要实现某个接口并且只需要这种实现的一个实例时,这是减少项目中可见类的数量的方法。
但不要滥用此功能。只有在实现很简单时才使用它(1-2行)。
这是一个*匿名的内部类*。看到[这个答案](http://stackoverflow.com/questions/355167/how-are-anonymous-inner-classes-used-in-java)的更多细节。 –