理解Java中的语法

时间:2011-09-07 14:32:44

标签: java

我可以在网上的几个例子中看到我的新语法,这是一个例子:

Accumulator<Integer> sum = new Accumulator<Integer>(){
    public Integer accumulate(Integer t1, Integer t2) {
    return t1+t2;
     }
  };

一般来说,在创建一个类的实例之后写一个{ a method }是什么意思?对于某些东西,它是某种旧的语法吗?

谢谢

6 个答案:

答案 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)

这是匿名类声明的一个示例。

Section 15.9.5

Java Language Specification讨论了这些类型的声明。