如何在内部静态类中使用类成员?
问题描述:
我想绘制图表每10秒。下面的代码结构应该清楚。问题是:
我不能在内部类PlotHandler中使用外部类成员sDtdChart,因为内部类是静态的。我该怎么办?
如果不是静态的,我得到警告:这个Handler类应该是静态的或者可能发生泄漏。
谢谢。
public class MainActivity extends Activity {
Timer timer = new Timer();
ScatterChart sDtdChart;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
timer.schedule(task, 0, 10 * 1000);
}
// plot chart
TimerTask task = new TimerTask() {
public void run() {
Message msg = new Message();
msg.what = 1;
plotHandler.sendMessage(msg);
}
};
Handler plotHandler = new PlotHandler();
private static class PlotHandler extends Handler {
public void handleMessage(Message msg) {
switch (msg.what) {
case 1:
plotChart();
break;
}
super.handleMessage(msg);
}
void plotChart() {
// it says non-static field cannot be referenced in a static context
sDtdChart = (ScatterChart) findViewById(R.id.chartDtd);
sDtdChart.setDescription("dtd");
sDtdChart.setData(xxxxx);
sDtdChart.invalidate();
}
}
答
您是否尝试过类似
public class MainClass {
public static void main(String[] args){
System.out.println(StaticNestedClass.age);
}
static class StaticNestedClass {
static int age = 10;
}
}
答
静态嵌套类不能直接引用在其外部类中定义的实例变量或方法:它只能通过一个对象引用中使用它们。
+0
我想我明白这一点。问题是我该怎么做?如果它不警告我可能会发生泄漏,我很好在内部类中使用非静态。但我不想要警告。 – caibirdcnb
为什么要在活动中保留一个静态内部类? – Shaishav
我不想,但如果不是静态的,我得到了一个警告泄漏可能会发生,我很害怕。 – caibirdcnb
使您正在使用的成员静态'静态ScatterChart sDtdChart;' –