-4

编辑

又一个更新。由于它通过 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 说它找不到类,

4

1 回答 1

1

不,这是无效的,因为A没有addInnerA定义方法(如您所示)。你的意思是在这里包括一个,我们应该给你怀疑的好处吗?

此外,您在);.11 行的末尾缺少 a B。我们是否也应该让您从怀疑中受益?

如果是这样,那是您实际上确实addInnerA在您的A类中定义了并且您还打算包括对 in 的调用的关闭,);那么您所拥有的是有效的语法,这将是一个真正的错误。addInnerAB.transform

但是让我们在这里明确一下,您在帖子中向我们展示的内容是无效的语法。仅当您定义A.addInnerA(InnerA)并修复对A.addInnerAin的调用时,它才有效B.transform

事实上,随着

public class A {
     public class InnerA {
          public void action() { }
     }

     public void addInnerA(InnerA innerA) { }
}

public class B {
     public void transform(A a) {
          a.addInnerA(a.new InnerA() {
              public void action() { }
          });
     }
}

我可以成功地让它与 Oracle 一起编译javac

于 2013-07-24T19:20:29.263 回答