<my reference>を含む囲みインスタンスが必要です


91

を含む囲みインスタンスが必要です

以下はコードです。positionObj私が使用しようとしているオブジェクトであり、上記のエラーが発生しています。

理由は不明です。

package toolBox;
import toolBox.Secretary.positionObj;    

public class PositionManagement {
    public static HashMap<String, Secretary.positionObj> main(String vArg){
        positionObj newPosition=new positionObj();
    }
}

回答:


129

positionObjインスタンスがSecretary属していない非静的内部クラスを使用しようとしています。
非静的内部クラスは、その親クラスのインスタンスに属している必要があります

positionObj通常のクラスまたは静的内部クラスに変更する必要があります。

または、someSecretary.new positionObj()インスタンスに属する内部クラスのインスタンスを作成するように書き込むこともできsomeSecretaryます。


合意されたが、この一般的なステートメントは少し不明確です。例を提供するか、これをより適切に説明できる場所を教えてください。感謝
ジェイソンm

はい。デバッグしようとしたときに、positionObjをstaticにすると、(Secretaryクラスで)機能することがわかりました。私は満足しており、すべてが機能するようになりましたが、ポインタをありがとうございます。このエラーの実際の原因を調べます。
jason m

2
エラーの実際の原因は、親インスタンスを指定しなかったことです。非静的内部クラスは、本当に必要で、そのしくみを理解していない限り、使用しないでください。c2.com/ppr/wiki/JavaIdioms/NoPublicInnerClasses.html
SLaks

どちらのソリューションも完全に機能します[1-positionObjクラスを静的にし、2-OuterClass.new classObj()を使用します]。おかげで
ジェイソンm

はい。ただし、どちらが正しいかを理解するには、コードベースを十分に理解する必要があります。
SLaks

16

まず、Outerクラスのオブジェクトを作成します。この場合、私は「秘書」だと思います。次に、positionObjを作成します。このような、

Secretary x = new Secretary();
Secretary.positionObj y = x.new positionObj();

ありがとうございました!...私はv 1.0からJavaを使用していますが、あなたがそれを実行できることを知りませんでした!
リチャードT

0

正しいジェネリック署名は

public static HashMap<String, positionObj> main(String vArg)

すでにインポートしているため、positionObjを修飾する必要はありません。

ただし、メインメソッドは以下のシグネチャに準拠する必要があると確信しています。mainをプログラムのメインメソッドにする場合は、シグネチャを

 public static void main(String[] args) {...}

Mapを返す別の静的メソッドを作成し、それをmainから呼び出すことができます。

注として、すべてのクラスは大文字で始まる必要があります。positionObjはPositionObjです。


ちょっと、いくつかのコードを省略しました。事件について合意した。クラスは何かを返しますが、エラーはここにあり、理由は不明です。
jason m

@ジェイソン、メインから何でも返すことはできないと思います。
hvgotcodes 2010年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.