È richiesta un'istanza di inclusione che contiene <il mio riferimento>


91

È richiesta un'istanza di inclusione che contiene

Di seguito il codice. positionObjè l'oggetto che sto cercando di utilizzare e mi dà l'errore di cui sopra.

Non è chiaro il motivo.

package toolBox;
import toolBox.Secretary.positionObj;    

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

Risposte:


129

Stai cercando di utilizzare la positionObjclasse interna non statica senza un'istanza di Secretarya cui appartenere.
Una classe interna non statica deve appartenere a un'istanza della sua classe genitore

Probabilmente dovresti passare positionObja una classe normale o una classe interna statica.

In alternativa, puoi scrivere someSecretary.new positionObj()per creare un'istanza della classe interna che appartiene someSecretaryall'istanza.


d'accordo, ma questa affermazione generale è un po 'poco chiara. potresti fornire un esempio o indicarmi un punto che potrebbe spiegarlo meglio? grazie
jason m

sì. Mi sono reso conto durante il tentativo di eseguire il debug che se rendevo statico il mio positionObj che funzionava (nella sua classe Segretario). Sono felice e tutto ciò che ora funziona, ma grazie per il puntatore. Esaminerà la causa effettiva di questo errore.
jason m

2
La vera causa dell'errore è che non hai fornito un'istanza genitore. Non utilizzare classi interne non statiche a meno che tu non ne abbia davvero bisogno e tu capisca come funzionano . c2.com/ppr/wiki/JavaIdioms/NoPublicInnerClasses.html
SLaks

entrambe le soluzioni funzionano perfettamente [1- rendendo statica la classe positionObj e 2- usando OuterClass.new classObj ()]. grazie
jason m

Sì. Tuttavia, è necessario comprendere abbastanza bene la propria base di codice per capire qual è quella corretta.
SLaks

16

Per prima cosa crea un oggetto della classe Outer. In questo caso penso "Segretario". Quindi crea positionObj. Come questo,

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

GRAZIE! ... Uso Java dalla v 1.0 e non sapevo che potessi farlo!
Richard T

0

La firma generica corretta sarebbe

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

non è necessario qualificare positionObj poiché lo si importa già.

Tuttavia, sono abbastanza sicuro che un metodo principale deve essere conforme alla firma sottostante. Se vuoi che main sia il metodo principale per il tuo programma, cambia la firma in

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

è possibile creare un metodo statico separato che restituisca una mappa e richiamarlo da main.

Come nota, tutte le classi dovrebbero iniziare con una lettera maiuscola, positionObj, dovrebbe essere PositionObj.


ehi, ho tralasciato del codice. d'accordo sul caso. la classe restituisce qualcosa, ma l'errore è qui e non è chiaro il motivo.
jason m

@jason, non penso che tu possa restituire nulla dal principale.
hvgotcodes
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.