gpt4 book ai didi

java - 无法访问(此处为类)的封闭实例

转载 作者:搜寻专家 更新时间:2023-10-31 19:33:35 27 4
gpt4 key购买 nike

我有一个名为 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";
}
}

我从文本文件中提取值以获取事件名称(例如“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;
...
}
}

当我运行该程序时,一切都运行良好,直到我将 EventFactory 类从 GreenhouseControls 中拉出并放入它自己的独立类中。现在我收到一个编译时错误:

"No enclosing instance of type GreenhouseControls is accessible. Must qualify the allocation with an enclosing instance of type GreenhouseControls (e.g. x.new A() where x is an instance of GreenhouseControls)."

查看 EventFactory 类中的行内注释以查看“new ThermostatNight(delayTime)”错误发生的位置

最佳答案

您的类(class)当前为 inner classes ,需要在包含类的实例的上下文中构造。您的选择是:

  • 构造内部类实例时指定外部类实例
  • 将您的嵌套类声明为static 类,此时它们将不再是内部类
  • 将嵌套类移出包含类,使它们成为顶级类

如果可能,我个人会选择最后一个选项 - 嵌套类有时很有用,但您应该只在真正有好处时才使用它们。有各种限制,这些限制可能非常微妙,如果可能,最好避免。您是否有任何令人信服的理由来创建这些嵌套类?

关于java - 无法访问(此处为类)的封闭实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20577017/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com