gpt4 book ai didi

java - 用于实例化内部类的奇怪语法

转载 作者:IT老高 更新时间:2023-10-28 20:42:14 25 4
gpt4 key购买 nike

我没想到在这个阶段我会在 Java 中遇到全新的语法,但是你瞧,我只是遇到了一些事情:

确切的上下文和下面的代码应该做什么是无关紧要的——它只是为了提供某种上下文。

我正在尝试在 IT Mill Toolkit 中综合创建一个事件,所以我写了这样一行:

buttonClick(new Button.ClickEvent(button));

但是,Eclipse 给了我以下错误信息:

No enclosing instance of type Button is accessible. Must qualify the allocation with an enclosing instance of type Button (e.g. x.new A() where x is an instance of Button).

当我将上面的行改写如下时,它不再提示了:

buttonClick(button.new ClickEvent(button)); // button instanceof Button

所以,我的问题是:后一种语法到底是什么意思,为什么第一个片段不起作用?Java 提示什么,它在第二个版本中做了什么?

背景信息:ButtonButton.ClickEvent 都是非抽象的公共(public)类。

最佳答案

内部类(如Button.ClickEvent)需要引用外部类(Button)的实例。

该语法创建了一个新的 Button.ClickEvent 实例,其外部类引用设置为 button 的值。

这是一个例子 - 忽略缺少封装等,这只是为了演示:

class Outer
{
String name;

class Inner
{
void sayHi()
{
System.out.println("Outer name = " + name);
}
}
}

public class Test
{
public static void main(String[] args)
{
Outer outer = new Outer();
outer.name = "Fred";

Outer.Inner inner = outer.new Inner();
inner.sayHi();
}
}

section 8.1.3 of the spec有关内部类和封闭实例的更多信息。

关于java - 用于实例化内部类的奇怪语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/633585/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com