当前位置: 首页 > 知识库问答 >
问题:

Javac无法用内部类编译内部类,但当类移动到自己的代码文件时,它就可以工作了——为什么?

江宏放
2023-03-14

我遇到了一种特殊的构建情况,java项目在eclipse中编译,但在构建机器上失败(Ant 1.8.2和JDK 1.6)

在名为“DestinationList”的类上编译失败,该类是具有内部类的内部类。结构如下所示。

public class MappingDetail {

    public class DestinationList extends AbstractGrowingScrollTable {

        public class DestinationListRow {

        }
    }
}

对于如上所述的类,编译失败,因为它无法找到“AbstractGrowingScrollTable”。如果删除内部类“DestinationListRow”,则编译成功。如果我将“DestinationList”移动到它自己的代码文件中,编译也会成功。

这是怎么回事?因为我有一份工作,所以我出于兴趣而问。我不明白为什么这会失败。

'AbstractPeragableScrollTable'在一个单独的jar中,但此jar肯定在类路径上,事实上打开了详细的日志记录,我可以看到该类实际上是在不久之后被javac找到的。摘录如下。注意在日志的最后一个列表中,它确实加载了AbstractMaragableScrollTable。

[javac] C:\Work\Decisiv\BUILD_AREA\code\source\APEI01\com\initech\sd\ap\ei01\ui\MappingDetail.java:551: cannot find symbol
[javac] symbol  : class AbstractGrowingScrollTable
[javac] location: class com.initech.sd.ap.ei01.ui.MappingDetail
[javac]     public class DestinationList extends AbstractGrowingScrollTable {  
[javac]                                          ^
[javac] [loading com\initech\sd\ks\ta01\resource\IResourceable.class(com\initech\sd\ks\ta01\resource:IResourceable.class)]  
[javac] [loading com\initech\sd\za\rt01\resources\Resources.class(com\initech\sd\za\rt01\resources:Resources.class)]  
[javac] [loading com\initech\sd\za\sh01\shared\Pair.class(com\initech\sd\za\sh01\shared:Pair.class)]
[javac] [loading com\initech\sd\za\ui\component\CheckBox.class(com\initech\sd\za\ui\component:CheckBox.class)]
[javac] [loading com\initech\sd\za\ui\component\Grid.class(com\initech\sd\za\ui\component:Grid.class)]
[javac] [loading com\initech\sd\za\ui\component\Image.class(com\initech\sd\za\ui\component:Image.class)]
[javac] [loading com\initech\sd\za\ui\component\Label.class(com\initech\sd\za\ui\component:Label.class)]
[javac] [loading com\initech\sd\za\ui\component\Row.class(com\initech\sd\za\ui\component:Row.class)]
[javac] [loading com\initech\sd\za\ui\component\layoutdata\GridLayoutData.class(com\initech\sd\za\ui\component\layoutdata:GridLayoutData.class)]
[javac] [loading com\initech\sd\za\ui\component\layoutdata\RowLayoutData.class(com\initech\sd\za\ui\component\layoutdata:RowLayoutData.class)]
[javac] [loading com\initech\sd\za\ui\component\properties\Alignment.class(com\initech\sd\za\ui\component\properties:Alignment.class)]
[javac] [loading com\initech\sd\za\ui\component\properties\Font.class(com\initech\sd\za\ui\component\properties:Font.class)]
[javac] [loading com\initech\sd\za\ui\component\table\ScrollTableColumn.class(com\initech\sd\za\ui\component\table:ScrollTableColumn.class)]
[javac] [loading com\initech\sd\za\ui\component\table\ScrollTableRow.class(com\initech\sd\za\ui\component\table:ScrollTableRow.class)]
[javac] [loading com\initech\sd\za\ui\resource\DefaultStyle.class(com\initech\sd\za\ui\resource:DefaultStyle.class)]
[javac] [loading com\initech\sd\za\ui\resource\ImageResources.class(com\initech\sd\za\ui\resource:ImageResources.class)]
[javac] [loading com\initech\sd\ui\cf\AbstractGrowingScrollTable.class(com\initech\sd\ui\cf:AbstractGrowingScrollTable.class)]

共有1个答案

卓雅达
2023-03-14

结果是一个编译器错误。

http://bugs.sun.com/view_bug.do?bug_id=6707323

 类似资料:
  • 问题内容: 我确实阅读了许多讨论内部类的主题,并且给人的印象是内部类可以访问封闭类的变量和方法。在下面的代码中,我有一个外部类和一​​个内部类,在测试类中,我创建了一个外部类的实例,然后从中创建了一个内部类的实例。但是我无法通过内部类引用访问String变量。救命? 问题答案: 内部类可以通过自己的方法访问外部类的方法和属性。看下面的代码:

  • 我确实读过一些讨论内部类的主题,我的印象是内部类可以访问封闭类的变量和方法。下面我有一个外部类和一个内部类,在测试类中我创建一个外部类的实例,然后从它创建一个内部类的实例。但是,我无法通过内部类引用访问字符串变量a。帮忙?

  • 问题内容: 我观察到外部类可以访问内部类的私有实例变量。这怎么可能?这是演示相同代码的示例代码: 为什么允许这种行为? 问题答案: 内部类只是一种将真正属于原始外部类的功能完全分开的方法。当你有两个要求时,可以使用它们: 如果是在单独的类中实现的,那么外部类中的某些功能将最为清晰。 即使在单独的类中,该功能也与外部类的工作方式紧密相关。 鉴于这些要求,内部类可以完全访问其外部类。由于它们基本上是外

  • 问题内容: 我来自Java背景,当您声明内部类时,它是静态的,不能访问外部类的实例,或者它不是静态的,并且可以访问正在被访问的外部类的实例。进行操作。参见http://en.wikipedia.org/wiki/Inner_class#Types_of_nested_classes_in_Java 斯威夫特对此有什么概念吗?从测试中,我似乎无法访问的对象,但是我肯定做错了。 问题答案: AFAIK

  • 为什么我不能这样做/是否有解决方法来实现这一点: 这两个编译错误是 > On