【问题标题】:Debugging multiple variables with same name in Eclipse在 Eclipse 中调试多个具有相同名称的变量
【发布时间】:2013-12-12 20:43:44
【问题描述】:

引用位置时出现空指针异常。在调试视图中,我发现了 2 个具有相同名称的不同变量。一个似乎为空并且有一个绿色圆圈,一个是正确的变量并且旁边有一个蓝色三角形。

为什么我的代码引用了 null 变量,为什么内存中有该变量的 2 个副本?

位置在此处的构造函数中设置

public Obstacle(int x, int y) {
  position = new PVector(x,y);

}

从这里的关卡生成器类调用构造函数

obstacle1 = new Obstacle(levelWidth/4, 375);
obstacle2 = new Obstacle(levelWidth/2, 375);
obstacle3 = new Obstacle(levelWidth*3/4, 375);

不确定要显示什么其他代码。

【问题讨论】:

  • 可能是本地/全局范围?
  • 如果没有看到更多代码,我们无法回答这个问题。
  • 方法collidesWith中的参数cnull,这就是它抛出npe的原因,发布CodeManager::detectCollisions
  • “不确定要显示什么其他代码”:一般来说,SSCCE 是您最好的选择。
  • 发布您的整个Obstacle 课程。我同意这可能是一个范围问题。您的蓝色三角形表示默认字段,绿色圆圈表示公共字段。

标签: java eclipse debugging processing


【解决方案1】:

问题是您在超类和子类中都有字段point。很可能您正在正确设置超类的字段,但“忘记”设置子类的字段。考虑以下示例:

class Super {
    Boolean exist;
}

class Sub extends Super {
    Boolean exist;
    Sub() {
        super.exist = true;
    }
}

当你执行以下代码时::

Sub sub = new Sub();
System.out.println(sub.exist);

null 将被打印,因为其Subexist 字段尚未启动。

为防止将来出现此类错误,请不要在子类中使用重复的字段,并使用 getter 方法访问字段值。

【讨论】:

  • 我犯错误时没有使用 super 但这仍然是正确的。
【解决方案2】:

绿色圆圈表示公共方法

红色方块表示私有方法

黄色菱形表示受保护的方法

蓝色三角形表示默认(包可见)方法

你可以在What do the icons for methods in Eclipse mean?看到这两个图标的区别

【讨论】:

  • 感谢这回答了我的部分问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-14
  • 1970-01-01
  • 2019-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多