我有一个代码(Activity.class
),其中正在调用我的基本方法来执行。
现在,我正在定义另一个类MyTask extending AsyncTask
。
我的问题是:
a)在某些情况下,我们在Activity.java
的同一Java文件中声明外部类作为示例,但在Activity类之外
b)在某些情况下,我们在Activity.java
的同一java文件中声明外部类,例如,但在Activity类和
c)在某些情况下,我们在MyTask.java
这三种实现之间在可访问性,内存和最佳实践方面有什么区别。 描述性的答案将清除我的概念,在这里受到欢迎。
答案 0 :(得分:0)
与计划在哪里实现AsyncTask有关。
如果AsyncTask与Activity的目标直接相关,例如,当您尝试从类中检索变量时,则建议将AsyncTask类包含在活动中。但是,这种情况很少发生。在这里,您必须将AsyncTask称为ActivityName.AsyncTaskName
,因此不建议asynctask是否与主动性功能密切相关
将AsyncTask放在同一文件中但在活动之外的缺点/优势(取决于使用情况),它只能是程序包私有的,这意味着我只能从同一程序包访问。
如果您打算在许多活动/类中使用此AsyncTask,则应将其放在另一个Java文件中
答案 1 :(得分:0)
可访问性或范围
就范围而言,在第一种情况中,我们在单个文件中定义了多个Java类(而非嵌套类)。
Java允许我们在一个文件中定义多个类,但是有一个限制,只能公开一个类。
因此只有一个类可以在其包外部访问,而其他所有类都是包私有类。但是,编译后,每个类将由其自己的.class
文件表示,与定义不同的文件相同。
在第二种情况下,我们在Java类(MyTask.java
)内定义了Java类(Activity.java
),这被称为内部类(在本例中为嵌套类)。 / p>
嵌套类可访问性也与类方法相同。如果该类是公共的,则可以通过其封装类的对象来访问它的包。但是,如果要访问嵌套类的方法,则需要创建与封装类相同的此类的对象。
例如new Activity().new MyTask().foo()
在第三种情况下,我们将每个类定义为单独的文件
可访问性将直接取决于我们为类定义的访问修饰符,如果类是公共的,则可以在整个项目中的任何地方访问它。通过这种方式,您可以完全控制您希望类的访问方式。
内存
对于内存,根本没有区别
在创建一个类的对象之前,一个类没有任何内存。因此定义类的位置完全不相关。内存将取决于创建的对象数。
但是对于嵌套类,如果我们在其封闭类之外访问嵌套类,那么我们首先需要其封闭类的对象,以便即使我们只想访问嵌套类,封闭类也将获得内存。
>但是,如果我们访问内部,则在所有情况下,规则存储器将保持不变
最佳做法
在这些情况下,最佳做法完全取决于用例
对于第一种情况,如果我们知道我们永远不会使用class A
,那么现在假设我们有两个class B
和class A extends B
和class B
直接在包的外部,然后我们可以在同一个文件中定义两个类(不是嵌套类),并可以将class A
设为我们的公共类
使用这种方法,我们只保存了文件,还保存了创建文件的时间,但同时也损害了可读性。以我个人的观点,我将创建一个新文件,以便我可以轻松阅读和检查我的课程。
在第二种情况下,如果我们知道某个类将只使用一次,例如MyTask.java
将仅在Activity.java
中使用,那么我们可以在{{ 1}},使用这种方法,我们将所有代码集中在一个地方,以便一起使用。
我们的第三种情况可以在很多情况下使用,通常是最常用的方式。每个类都放在单独的文件中,因此以后可以轻松访问每个类
在我们的示例中,如果我们知道Acitivty.java
可以被多个类使用,那么我们可以将其创建为具有公共访问权限的单独文件。