为什么它被称为"匿名"内部阶级?

And*_*ich 2 java

就在今天,我需要一种在不同对象之间传递函数的方法.我很快就知道你不能直接用Java做到这一点,但是你可以传递一个显然被称为"匿名内部类"的wht实例,如下所示:

要定义类:

interface MyCallback {
    public int execute(int i1, int i2);
}
Run Code Online (Sandbox Code Playgroud)

要创建它的实例:

MyCallback callback = new MyCallback() {
    public int execute(int i1, int i2) {
        return i1 + i2;
    }
};
Run Code Online (Sandbox Code Playgroud)

并称之为:

int sum = callback.execute(1, 2);  // Sets sum to 3.
Run Code Online (Sandbox Code Playgroud)

很简单.但我不明白为什么它被称为"匿名".我不是只给它起名字MyCallback吗?一个被命名的东西不能匿名,对吗?请帮助我摆脱对这个术语的困惑.

Sot*_*lis 10

不,匿名类是该类型的子类型,其名称用于实例化它.

Java编译器自动从类实例创建表达式派生匿名类声明.

MyCallback是超类型的名称.您的匿名子类没有在编译时对开发人员有用的名称.

实际的类将有一个名称,类似于MyCallback$1,但您将无法在源代码中使用它.例如,你做不到

MyCallback$1 anonymousClassInstance = ...;
Run Code Online (Sandbox Code Playgroud)

  • `但是你将无法在源代码中使用它.实际上,在反射的帮助下你可以很容易地使用它,但这是另一个故事.+1 (2认同)