【问题标题】:Build error in eclipseeclipse中的构建错误
【发布时间】:2011-08-16 08:24:18
【问题描述】:

我是 Eclipse 和 Java 新手。

我想知道以下是否是 Eclipses 编译器或我的安装中的错误。

我在公共类中定义了一个公共类来定义服务方法的返回类型。

public class ServiceThing {
    public class ReturnType {...}
    public ReturnType serviceMethod (...) {...}
    ...
}

在调用服务方法的类中,我创建了一个 ReturnType 来保存默认消息:

ReturnType returnType = new ReturnType(...);

当尝试构建它时,我收到以下错误:

构建工作区: 构建过程中发生错误。 在项目“XXXX.android”上运行构建器“Java Builder”时出错。 java.lang.ArrayIndexOutOfBoundsException

保存失败: 保存失败; java.lang.NullPointerException

我发现需要的语法是:

ServiceThing serviceThing = ...; 
ReturnType returnType = serviceThing.new ReturnType(...);

但是编译器无论如何都不应该生成 nullpointerException。

【问题讨论】:

  • 请问为什么在公共类里面需要一个公共类?如果它是公开的,为什么不把它做成一个完全独立的类呢。
  • 这只是为了强烈表明课程的意图。纯粹用于服务调用的返回类型。如果我把它放到单独的文件中,我认为它看起来会很乱,因为它没有自己的生命

标签: java eclipse


【解决方案1】:

通过将ReturnType 设为public static class,您将摆脱对父实例的引用和您的

ReturnType returnType = new ReturnType(...);

将按您的预期工作。

没有static 修饰符的子类实例包含对其父对象的隐式引用。这就是为什么在这种情况下需要ServiceThing 实例来创建ReturnType 实例的原因。

【讨论】:

  • 不错的答案。这个解决方案实际上在第 22 条中的Effective Java, Second Edition 中得到认可:优先使用静态成员类而不是非静态。我仍然认为编译器应该写出这样的错误信息:没有封闭实例就不可能创建非静态成员类的实例。
猜你喜欢
  • 2011-12-09
  • 2015-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-19
  • 2016-09-19
  • 2013-11-17
相关资源
最近更新 更多