2011-08-16 9 views
5

私はEclipseとJavaの両方が初めてです。Eclipseのビルドエラー

Eclipsesコンパイラまたは私のインストールで次のエラーが発生するのでしょうか?

パブリッククラス内にパブリッククラスを定義して、サービスメソッドの戻り値の型を定義しました。私は、デフォルトのメッセージを保持するがReturnTypeをinstatiateサービスメソッドを呼び出すクラスで

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

ビル:

ReturnType returnType = new ReturnType(...); 

これを構築しようと、私は次のエラーを取得するとワークスペース: ビルド中にエラーが発生しました。 プロジェクト 'XXXX.android'でBuilder 'Java Builder'を実行中にエラーが発生しました。 java.lang.ArrayIndexOutOfBoundsException

保存に失敗しました: 保存に失敗しました。 のjava.lang.NullPointerException

私は必要な構文があることが判明:

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

しかし、コンパイラは、とにかくNullPointerExceptionが発生するべきではありません。 ReturnTypepublic static classすることにより

+0

パブリッククラス内にパブリッククラスが必要なのはなぜですか?一般に公開されている場合は、スタンドアローンのクラスにしてみましょう。 – Gapton

+1

クラスの意図を強く示すだけです。サービス呼び出しの戻り値の型として使用されるのは純粋なものです。 私はそれをスパザートファイルに入れれば、それはそれ自身で人生を持たないので乱雑に見えると思う。 – bitestar

答えて

4

あなたが親インスタンスへの参照を取り除くでしょう、あなたはそれが期待どおりに

ReturnType returnType = new ReturnType(...); 

が動作します。

static修飾子を使用しない場合、サブクラスのインスタンスには親オブジェクトへの暗黙の参照が含まれます。この場合、ReturnTypeのインスタンスを作成するために、ServiceThingインスタンスが必要なのはこのためです。

+0

ニースの答え。この解決法は実際には、Item 22:nonstatic上の静的メンバークラスを優先する[Effective Java、Second Edition](http://java.sun.com/docs/books/effective/)で支持されています。 私はまだコンパイラがこのエラーメッセージを書かなければならないと思います。囲むインスタンスなしで非静的メンバークラスのインスタンスを作成することは不可能です。 – bitestar

関連する問題