我有一个名为GreenhouseControls的课程,有一堆
内置的类如:
public class ThermostatNight extends Event {
public ThermostatNight(long delayTime) {
super(delayTime);
}
public void action() {
// hardware control code here.
thermostat = "Night";
}
public String toString() {
return "Thermostat on night setting";
}
}
Run Code Online (Sandbox Code Playgroud)
我从文本文件中提取值以获取诸如"ThermostatNight"之类的事件名称和诸如"2000"之类的时间值.为了使用这些值实例化一个新对象,我构建了一个EventFactory,它接受值作为参数.
这是我为从文本文件值创建新事件对象而构建的类:
public class EventFactory{
public static Event createSpecificEvent(String eventName, long delayTime) {
Event event = null;
switch(eventName) {
case "ThermostatNight":
event = new ThermostatNight(delayTime); // Compiler error
break;
case "ThermostatDay":
event = new ThermostatDay(delayTime);
break;
case "LightOn":
event = new LightOn(delayTime);
break;
case "LightOff":
event = new LightOff(delayTime);
break;
...
}
}
Run Code Online (Sandbox Code Playgroud)
当我运行程序直到我从GreenhouseControls中取出EventFactory类并进入它自己的独立类时,一切都运行良好.现在我得到一个编译时错误,说:
"无法访问GreenhouseControls类型的封闭实例.必须使用GreenhouseControls类型的封闭实例限定分配(例如,xnew A(),其中x是GreenhouseControls的实例)."
查看EventFactory类中的内嵌注释,以查看"new ThermostatNight(delayTime)"中发生错误的位置