编辑
又一个更新。由于它通过 javac 在命令行上运行良好,但在 netbeans 中运行良好,因此我尝试了 a_horse_with_no_name 的建议。在 Netbeans 中关闭“保存时编译”也可以解决问题并使程序再次运行。因此,匿名内部类问题只是 Netbeans 中的一个问题,并且只有在“保存时编译”被打开的情况下。
所以问题是与保存时编译相关的 Netbeans 错误。
此外,由于有些人似乎对复制/粘贴时无法编译的代码有如此大的问题,因此我进一步简化了示例。删除使样本不再代表我的用例在做什么的基本思想,但对于手头的问题来说没有必要。
...现在又是一个有趣的小更新。显然,即使关闭保存时编译,Netbeans 错误报告有时仍然很奇怪,但是当它发生时,它至少在我告诉它运行时不会影响执行。因此,错误报告分析必须与保存时编译功能所绑定的同一后端工具相关联。因此,该错误很可能与特定的后端工具有关。
结束编辑
在另一个类的代码中创建了一个匿名内部类之后,Netbeans 对此感到非常害怕。只要它在那里,Netbeans 错误报告和程序执行就不能正常工作,但是如果我删除代码 Netbeans 会再次正常工作。
以下是无效的 Java 语法吗?
public class A
{
public class InnerA
{
}
}
和
public class B
{
public void transform(A a)
{
a.new InnerA()
{
};
}
}
在我的具体情况下,我有一个正在运行的模拟,并A
跟踪它的所有内部类实例,并让它们在一段时间内对其自身执行转换。所以每个内部类都会存在几秒钟,做它的事情,然后它的所有者将处理它。
其他类负责A
通过添加指定操作的内部类的匿名版本来处理。
如果我从 A 中删除 InnerA,它会起作用,使其成为自己的类,但就我而言,让它成为 A 的内部类更有意义。
实际上,我的内部类也有其他属性和方法,但这是一个简单的示例。a.addInner(a.new InnerA(){})
只要它存在,它似乎就会破坏Netbeans 。我应该提交 Netbeans 错误,还是这是非法的语法使用?
编辑...由于有些人很好奇 Netbeans 究竟是如何破坏我的,这里是:有时程序不会通过 Netbeans run 命令执行,而是说代码中仍然存在错误。代码与该示例类似的代码文件将文件标记为有错误,但代码编辑器部分未显示代码中的任何错误。如果我对代码进行更改(就像添加空格一样简单)并重新保存,有时打开文件选项卡中的文件列表会从文件中删除错误符号,有时不会,有时文件资源管理器面板中的文件列表会删除错误符号,有时不是(有时它们以这种方式彼此不同步),如果两者都没有显示错误,那么有时它会运行,但是当它尝试运行时 Netbeans 说它找不到类,