我对Java比较陌生。
我正在写一个Android应用程序,现在我正在回顾我的代码,整理和坚持我的编码结构,以更佳的实践风格。
我正在构建我认为合适的方法和类,以避免我所生成的大量重复代码。我发现自己试图创建一个类(例如HeavyStuff.java),其中包含几个AsyncTask方法(例如MyTask1和MyTask2)。当从活动调用类时,我想在某个点执行MyTask1,并在其他地方的某个点执行MyTask2。我正在尝试分别使用以下内容:
HeavyStuff.MyTask1 myTask1 = new HeavyStuff.MyTask1();
myTask1.execute();
和
HeavyStuff.MyTask2 myTask2 = new HeavyStuff.MyTask2();
myTask2.execute();
问题是,我得到一个错误说"HeavyTest不是一个封闭类"。我的类是这样的:
package com.wizzkidd.myapp;
import android.os.AsyncTask;
public class HeavyStuff {
public class MyTask1 extends AsyncTask<String, String, String> {
//...
//...
}
public class MyTask2 extends AsyncTask<String, String, String> {
//...
//...
}
}
类也可以在这里看到完整:http://hastebin.com/yahihokupu
使类成为"封闭类"所需的内容
——编辑——
我已经看过了作为可能重复我的问题给出的答案,它不起作用。给出的答案建议使用static
作为我的内部类,但这对我不起作用。
然而,我发现我可以这样做:
HeavyStuff.MyTask1 myTask1 = new HeavyStuff().new MyTask1();
myTask1.execute();
它可以工作,但是这样做的含义(如果有的话)是什么?这是不好的练习吗?
我知道你把MyTask1
和MyTask2
放在同一个类中,因为它们是相似的,但总的来说这并不理想。
如果您计划在整个代码库中创建MyTask1
的新实例和MyTask2
的新实例,那么它们应该在自己完全独立的类中(即MyTask1.java
只包含MyTask1
类)。
您仍然可以通过将它们放在同一个java包中来使它们"在一起",例如:
package.heavystuff
.
我已经找到了我问题的答案。我最初发布了我认为是一个解决方案的编辑,但澄清一下,这是我的工作答案:
HeavyStuff.MyTask1 myTask1 = new HeavyStuff().new MyTask1();
myTask1.execute();