在使用相同实例的同时从外部类调用内部类方法

时间:2013-03-28 12:03:20

标签: java multithreading timer scope

我试图创建一个在时间到期时更改布尔值的Timer类,但是我正在努力寻找一种方法来保持Light类的相同“实例”(因为我将拥有多个)我怀疑静态类和方法是答案,因为我总共有5个灯

这是代码,我已经包含了我试图从实际Light类中的线程调用的方法以供参考。

    import java.util.TimerTask;

public class Light extends RoomObject{
    //Constructors
    public Light(String n, String r, boolean s){
        super(s, r, n);
    }

    //Class methods

    public String toString(){
        return "Light|" + super.getName() + "|" + super.toString() + "|";
    }

    public void setState(boolean s){
        super.setState(s);
    }
}

class TimedLight extends TimerTask{

    public void run() {

    }
}

NB。我试图从线程

调用setState方法

2 个答案:

答案 0 :(得分:1)

您可以尝试这样的事情

class TimedLight  extends TimerTask{
Light light ;
TimedLight (Light light){
this.light = light;
}
 public void run() {
 light.setState(..);

 }
}

答案 1 :(得分:1)

因为TimedLight 未包含在Light类中,因为错误说明了。对于引用Light,你需要引用它,为此你可以在构造函数中传递它。

public TimedLight(Light light){
   light.setState(..);
}

TimedLightLight相同级别,而不是嵌套类。因此,您无权访问TimedLight中的Light实例。