Java - 对于每个文件一个类的规则感到困惑

3
在Java中,一个文件只能有一个类,这一点让我感到困惑。我正在编写一个Android应用程序,并尝试实现回答此问题的方法: Android中AsyncTask的常见类? 它要求定义一个接口,由A类实现并由B类作为其构造函数的参数接受。
所以我需要一个A.java和一个B.java文件,但接口应该放在哪里呢?它需要单独的Java文件吗?还是我必须在A和B类中都定义它?如果不是,又该如何导入它?
此外,我将拥有大约10个不同的AsyncTask类,但我不想为每个类创建一个新文件。你有什么建议吗?是否有一种方式可以将所有10个类放在一个文件中?或者我应该在类中创建一个大的if/then代码块,并传递一个告诉它要执行哪个任务的参数?
2个回答

2
你需要将它放在AsyncTaskCompleteListener.java中。如果它在同一个包中,那么就不需要导入它。如果在不同的包中,你可以使用import语句导入它。
在深入学习之前,我建议你先阅读一下Java教程
至于10多个类 - 你可以在另一个类中使用public static class。这样做是可行的,但是最好还是习惯每个类都有自己的文件 - 这是首选选项。内部静态类仅在内部类与其所有类之间存在逻辑关系时使用。

我创建了我需要的8个不同文件,但已经开始后悔了,因为我必须在所有8个文件中进行更改,这些更改都是针对每个类共同的区域。而当我进行记录和测试时,如果我改变了文档的方式,还会有更多的更改。是否有一个好的例子链接,介绍如何使用“public static class”,并将公共类保持在一个文件中? - user317033
你是在像Eclipse、NetBeans或IntelliJ这样的IDE中编辑代码吗?如果是,那么像重命名等任务将会更新所有引用该名称的文件。我强烈建议使用IDE而不是简单的文本编辑器。 - Neil Bartlett
我正在使用Eclipse的VI模式,对于在一个文件中处理代码非常高效。感谢重命名提示,但在这种情况下并没有重命名。强制我使用鼠标打开8个不同的文件来进行8个简单的复制和粘贴是荒谬的。 - user317033
如果你在复制和粘贴代码,那么你做错了什么。把重复的代码因式分解成单独的类或方法。 - Skip Head
不是我需要分离但相似的类,而是Android和Java需要。但即使我可以这样做,将这样简单的类分解成更多的类只会增加你的代码行数并增加维护负担。 - user317033

2

接口应该放在哪里?需要一个单独的Java文件吗?

是的,你可以将接口和/或其中一个类设为非公共类,但这样你就无法在包外使用它们。

此外,我将有大约10个不同的AsyncTask类,但我不想为每个类创建一个新文件。

为什么不呢?在Java中,通常每个类或接口都有一个单独的文件。我建议接受这种约定,因为试图违反它将给你带来无尽的问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接