我可以在网上的几个例子中看到我的新语法,这是一个例子:
Accumulator<Integer> sum = new Accumulator<Integer>(){
public Integer accumulate(Integer t1, Integer t2) {
return t1+t2;
}
};
一般来说,在创建一个类的实例之后写一个{ a method }
是什么意思?对于某些东西,它是某种旧的语法吗?
谢谢
答案 0 :(得分:5)
您正在创建一个匿名内部类。
new Accumulator<Integer>() {
@Override
public Integer accumulate(Integer t1, Integer t2) {
return t1 + t2;
}
};
定义Accumulator
的匿名实现。然后,您继续将此匿名类的引用分配给sum
。
将其视为同时定义和分配实现的便捷方式。这是一个syntactic sugar。
答案 1 :(得分:2)
不,这是一个匿名的内部类。它具有接口的签名或类型的类,但可以覆盖公共方法。
答案 2 :(得分:2)
这称为匿名内部类,即没有名称的类,因此可以与其唯一的实例一起创建。当您需要实现某个接口并且只需要一个此类实现的实例时,这是减少项目中可见类数量的方法。
但请勿滥用此功能。仅在实现很简单时使用它(1-2行)。
答案 3 :(得分:1)
这是一个常用的匿名内部类。
引用“匿名类本质上是一个没有名称的本地类。”
答案 4 :(得分:1)
要么创建一个带有重载方法的匿名子类,要么创建一个匿名接口实现(取决于Accululator是一个类还是接口)。
答案 5 :(得分:1)