看下面的hirachy类,我很困惑为什么两个孤立的类可以存在于一个java文件中。
我知道这两个课程彼此有关,但问题是我不清楚他们之间到底有什么关系。
此外,如果您发现NewFileTask
延伸TaskDialog.Task
而不是TaskDialog
,我无法理解这意味着什么,以及它用于什么?谁有人可以帮忙?任何材料或参考供我理解,我们将不胜感激。提前谢谢!
class NewFileTask extends TaskDialog.Task {
public NewFileTask(String repoID, String parentDir,
String fileName, DataManager dataManager) {
@Override
protected void runTask() {
}
}
}
,接下来是同一个java文件中的类出口
public class NewFileDialog extends TaskDialog {
public void init(String repoID, String parentDir, Account account) {
}
@Override
protected View createDialogContentView(LayoutInflater inflater, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.dialog_new_file, null);
fileNameText = (EditText) view.findViewById(R.id.new_file_name);
if (savedInstanceState != null) {
//...
}
return view;
}
}
如果您想阅读完整的源代码,请go here on github
答案 0 :(得分:1)
我很困惑,为什么两个孤立的类可以存在于一个java文件中。
Java语言规范允许您在编译单元(例如文件)中声明多个顶级类型
Java语法(见JLS 7.3)说:
CompilationUnit:
[PackageDeclaration] {ImportDeclaration} {TypeDeclaration}
其中[ ... ]
表示可选,{ ... }
表示零或更多。
此外,编译器允许进行以下限制:
一个文件最多包含 一种public
和/或由不同编译单元引用的类型。
所述类型的名称与源文件的名称相匹配。
正如JLS 7.6所解释的那样,这些规则使编译器在查找某些其他编译单元引用的类/接口时,可以轻松确定应检查哪些源代码文件。
这是用来做什么的?
嗯,大多数Java程序员都不使用它。大多数Java程序员无论如何都将每种类型放在一个单独的源文件中。
然而,有些人宁愿不在“很多”单独的文件中使用他们的源代码。
“一个文件中的多个顶级类型”功能来自Java 1.0,其中没有类型的嵌套。嵌套类型使此功能变得多余。
答案 1 :(得分:0)
你可以看到只有一个类是公共的,另一个是默认的,这意味着没有编译错误,你可以在一个java文件中添加尽可能多的类,唯一的限制是只有一个顶层class应该是公共的,以便编译器可以为源文件提供该公共类的名称。我认为源代码的作者之所以这样做是因为他选择编写这样的代码,即使两个类之间的依赖关系没有区别,你要么这样写,要么将它们分开(建议将它们分开) 我想也许他认为他们是一个班级。