Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 类文件中的内部类,但不在类主体中?_Java_Inner Classes - Fatal编程技术网

Java 类文件中的内部类,但不在类主体中?

Java 类文件中的内部类,但不在类主体中?,java,inner-classes,Java,Inner Classes,在遗留应用程序的代码中,我遇到了一个包含内部类的类文件,但这些内部类不是在类主体中定义的,而是在类定义的右括号之后定义的 它看起来像这样: MyClass.java public class MyClass { // class body } class DataStructure1 { String field1; Integer field2; } class DataStructure2 { Date field3; String

在遗留应用程序的代码中,我遇到了一个包含内部类的类文件,但这些内部类不是在类主体中定义的,而是在类定义的右括号之后定义的

它看起来像这样:

MyClass.java

public class MyClass {

    // class body

}

class DataStructure1 {

    String field1;

    Integer field2;

}

class DataStructure2 {

    Date field3;

    String field4;

}
显然,编译器没有抱怨,但我很恼火,因为我以前从未见过这样的事情

  • 这是有效的内部类吗
  • 正文中定义的类有什么不同吗(缩进除外)

据我所知,这些根本不是内部类,而是碰巧位于同一源文件中的另外两个包私有类。在给定的
.java
文件中有多个类定义是完全可以接受的


顾名思义,内部类必须在包含外部类的内部定义。这里的情况并非如此。

:“内部类是未显式或隐式声明为静态的嵌套类”,“嵌套类是其声明发生在另一个类或接口主体内的任何类。”。它们不在另一个类的主体内,因此它们不是内部类。如果知道要查找什么,阅读某些内容总是很容易的谢谢你的链接。在有内部类之前,有包本地类。这可从Java 1.0获得。@PeterLawrey我知道“包私有”类的(非)修饰符。我不知道的是,在一个类文件中声明多个类的可能性。唯一的限制是最多只能声明一个顶级公共类。你是如何为一个已经重复的问题添加答案的?@Codebender Brilliant question。我想安迪在我发布之前就已经标记了副本,但实际上我是在他标记副本之前开始写作的。因此,似乎只要你开始回答,So引擎就会让你得到答案。@TimBiegeleisen我读过的行为应该是这样的,但我发现如果问题被标记为重复,即使我已经开始写作,按钮也会变灰。一个“酸与最终一致性”的案例“马库斯密特劳尔可能是这样的。