Se requiere una instancia adjunta que contenga <mi referencia>

91

Se requiere una instancia adjunta que contenga

A continuación se muestra el código. positionObjes el objeto que estoy tratando de usar y me está dando el error anterior.

No está claro por qué.

package toolBox;
import toolBox.Secretary.positionObj;    

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

Respuestas:

129

Está intentando utilizar la positionObjclase interna no estática sin una instancia de Secretarya la que pertenezca.
Una clase interna no estática debe pertenecer a una instancia de su clase principal

Probablemente debería cambiar positionObja una clase normal o una clase interna estática.

Alternativamente, puede escribir someSecretary.new positionObj()para crear una instancia de la clase interna que pertenece a la someSecretaryinstancia.

SLaks
fuente
Estuvo de acuerdo, pero esta declaración general es un poco confusa. ¿Podría darme un ejemplo o señalarme algún lugar que pueda explicar mejor esto? gracias
jason m
si. Me di cuenta al intentar depurar que si convertía mi positionObj en estática, funcionaba (en su clase de secretaria). Estoy feliz y todo eso ahora funciona, pero gracias por el puntero. Investigará la causa real de este error.
jason m
2
La causa real del error es que no proporcionó una instancia principal. No use clases internas no estáticas a menos que realmente necesite una y comprenda cómo funcionan . c2.com/ppr/wiki/JavaIdioms/NoPublicInnerClasses.html
SLaks
ambas soluciones funcionan perfectamente [1- haciendo que la clase positionObj sea estática y 2- usando OuterClass.new classObj ()]. gracias
jason m
Si. Sin embargo, debe comprender su base de código lo suficientemente bien como para averiguar cuál es el correcto.
SLaks
16

Primero crea un objeto de clase Outer. En este caso pienso en "Secretario". Luego crea positionObj. Me gusta esto,

Secretary x = new Secretary();
Secretary.positionObj y = x.new positionObj();
Teshan
fuente
¡GRACIAS! ... He usado Java desde la versión 1.0 y ¡no sabía que podías hacer eso!
Richard T
0

La firma genérica correcta sería

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

no necesitas calificar positionObj ya que ya lo importaste.

Sin embargo, estoy bastante seguro de que un método principal debe ajustarse a la firma a continuación. Si desea que main sea el método principal de su programa, cambie la firma a

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

puede crear un método estático independiente que devuelva un mapa e invocarlo desde main.

Como nota, todas las clases deben comenzar con una letra mayúscula, positionObj, debe ser PositionObj.

hvgotcodes
fuente
hey, dejó un código. acordado sobre el caso. la clase devuelve algo, pero el error está aquí y no tengo claro por qué.
jason m
@jason, no creo que puedas devolver nada de main.
hvgotcodes