【问题标题】:Why there are two parallel classes in one file?为什么一个文件中有两个并行类?
【发布时间】:2014-08-21 10:32:18
【问题描述】:

看到下面的类hiracy,我很困惑为什么两个独立的类可以存在于一个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

【问题讨论】:

标签: java android class dialog extends


【解决方案1】:

我很困惑为什么两个独立的类可以存在于一个java文件中。

Java 语言规范允许您在编译单元(例如文件)中声明多个顶级类型

Java 语法(参见JLS 7.3)说:

CompilationUnit:
    [PackageDeclaration] {ImportDeclaration} {TypeDeclaration}

其中[ ... ] 表示可选,{ ... } 表示零个或多个。

此外,允许编译器做出以下限制:

  • 一个文件最多包含一种public 和/或由不同编译单元引用的类型。

  • 所述类型的名称与源文件的名称匹配。

正如JLS 7.6 解释的那样,这些规则使编译器可以轻松地确定在查找由其他编译单元引用的类/接口时应该检查哪些源代码文件。


这是干什么用的?

嗯,大多数 Java 程序员不使用它。无论如何,大多数 Java 程序员都将每种类型放在单独的源文件中。

但是,有些人不喜欢将他们的源代码放在“很多”单独的文件中。

“一个文件中的多个顶级类型”功能来自 Java 1.0,其中没有类型嵌套。嵌套类型使此功能变得多余。

【讨论】:

    【解决方案2】:

    你可以看到只有一个类是公共的,另一个是默认的,这意味着没有编译错误,你可以在一个 java 文件中添加尽可能多的类,唯一的限制是只有一个顶级类应该是公共的以便编译器可以为源文件提供该公共类的名称。我认为源代码的作者这样做的原因是因为他选择这样编写他的代码,即使两个类之间的依赖关系没有区别,要么你这样写,要么将它们分开(建议将它们分开) ) 我想也许他认为他们是一类。

    【讨论】:

      猜你喜欢
      • 2014-06-08
      • 2011-05-07
      • 2014-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多