繁体   English   中英

如何将对外部类的引用传递给内部类中的方法? (或者如何将“ this”传递给内部类?)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM