[英]How do I pass a reference to the outer class to a method in an inner class? ( Or how do I pass “this” to an inner class? )
我的课如下:
private class LanePair {
public int cameraNumber;
public Nest nest1, nest2;
public LanePairStatus status = LanePairStatus.TIMER_OFF;
Timer timer = new Timer();
public LanePair(int cameraNunber, Nest nest1, Nest nest2) {
this.cameraNumber = cameraNumber;
this.nest1 = nest1;
this.nest2 = nest2;
}
public void startTimer() {
status = LanePairStatus.TIMER_ON;
timer.schedule(new TimerTask() {
public void run() {
DoAskForLaneClear(/*I want to pass this class (LanePair) here*/);
}
}, 6000 ); // 6 seconds
}
public void stopTimer() {
timer.cancel();
}
}
问题是,我不知道该怎么做。 有什么建议么?
DoAskForLaneClear(LanePair.this);
由于您不能使用this
(它将引用TimerTask
),但是您的匿名类不能与LanePair
的实例LanePair
存在,该实例由LanePair.this
引用。
我想你要么
DoAskForLaneClear(this);
要么
this.DoAskForLaneClear();
我看不到DoAskForLaneClear()的定义位置。
我有时会这样做:
public void startTimer() {
status = LanePairStatus.TIMER_ON;
**final LanePair lanePairRef = this;**
timer.schedule(new TimerTask() {
public void run() {
DoAskForLaneClear(**lanePairRef**);
}
}, 6000 ); // 6 seconds
}
如果您想在任何情况下使用此词,例如:)
import java.util.Timer;
import java.util.TimerTask;
public class Test
{
public void doAskForLaneClear(LanePair lanePair){
//Action of lanePair
}
private class LanePair {
public int cameraNumber;
public Nest nest1, nest2;
public LanePairStatus status = LanePairStatus.TIMER_OFF;
Timer timer = new Timer();
public LanePair(int cameraNumber, Nest nest1, Nest nest2) {
this.cameraNumber = cameraNumber;
this.nest1 = nest1;
this.nest2 = nest2;
startTimer();
}
public void startTimer() {
status = LanePairStatus.TIMER_ON;
timer.schedule(new MyTimerTask(this), 6000 ); // 6 seconds
}
public void stopTimer() {
timer.cancel();
}
}
private class MyTimerTask extends TimerTask{
private LanePair lanePair;
public MyTimerTask(LanePair lanePair){
this.lanePair = lanePair;
}
@Override
public void run() {
Test.this.doAskForLaneClear(lanePair);
}
}
}
LanePair.class
?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.