2010-11-28 37 views
64
erforderlich

eine umschließende Instanz, dieEine umschließenden Instanz, die <meine Referenz> enthält, wird

Im Folgenden wird der Code erforderlich enthält. positionObj ist das Objekt, das ich versuche zu verwenden, und es gibt mir den obigen Fehler.

Es ist unklar, warum.

package toolBox; 
import toolBox.Secretary.positionObj;  

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

Antwort

96

Sie versuchen, die nicht statische innere positionObj-Klasse ohne eine Instanz von Secretary dafür zu verwenden.
Eine nicht statische innere Klasse muss zu einer Instanz ihrer übergeordneten Klasse gehören

Sie sollten wahrscheinlich positionObj in eine normale Klasse oder eine statische innere Klasse ändern.

Alternativ können Sie someSecretary.new positionObj() schreiben, um eine Instanz der inneren Klasse zu erstellen, die zur someSecretary Instanz gehört.

+0

einverstanden, aber diese allgemeine Aussage ist ein wenig unklar. Könnten Sie mir ein Beispiel geben oder auf etwas hinweisen, das das besser erklären könnte? Danke –

+1

@jason: Hier gehst du. – SLaks

+0

ja. Ich erkannte, wenn ich versuche, das zu debuggen, wenn ich mein positionObj zu statisch machte, dass es funktionierte (in seiner Sekretärklasse). Ich bin glücklich und alles, was es jetzt funktioniert, aber danke für den Zeiger. Wird die tatsächliche Ursache dieses Fehlers untersuchen. –

0

Die richtige generische Signatur würde

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

Sie positionObj qualifizieren nicht sein müssen, da Sie es bereits importieren.

Allerdings bin ich mir ziemlich sicher, dass eine Hauptmethode der Signatur unten entsprechen muss. Wenn Sie beabsichtigen, die wichtigste Methode für Ihr Programm zu haben Haupt sein, die Signatur ändern

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

können Sie eine separate statische Methode erstellen, die eine Karte zurückgibt und es aus dem Haupt aufzurufen.

Als Anmerkung sollten alle Klassen mit einem Großbuchstaben beginnen, PositionObj, sollte PositionObj sein.

+0

hey, einige Code weggelassen. stimmte dem Fall zu. Die Klasse gibt etwas zurück, aber der Fehler ist hier und ich weiß nicht warum. –

+0

@jason, ich habe meine Antwort aktualisiert – hvgotcodes

+0

@jason, ich glaube nicht, dass Sie etwas von Main zurückgeben können. – hvgotcodes

1

Zuerst erstellen Sie ein Objekt der äußeren Klasse. In diesem Fall denke ich "Sekretär". Dann erzeuge positionObj. So,

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