2011-02-07 24 views
61

He una clase llamada Media que cuenta con un método llamado setLoanItem:"método no estático no puede ser referenciado desde un contexto estático" error

public void setLoanItem(String loan) { 
    this.onloan = loan; 
} 

Estoy tratando de llamar a este método de una clase llamada GUI en de la siguiente manera:

public void loanItem() { 
    Media.setLoanItem("Yes"); 
} 

Pero estoy consiguiendo el error

setLoanItem método no estático (java.lang.String) no pueden ser referenciadas desde un contexto estático

Simplemente estoy tratando de cambiar la variable onloan en la clase Media a "Sí" de la clase GUI.

He examinado otros temas con el mismo mensaje de error pero nada está haciendo clic!

+3

debe aceptar una respuesta para esto. – NateW

Respuesta

11

setLoanItem es un método de instancia, lo que significa que necesita una instancia de la clase Media para llamarlo. Está intentando llamarlo en el tipo de Medios en sí.

Es posible que desee consultar algunos tutoriales orientados a objetos básicos para ver cómo funcionan los miembros estáticos/instancia.

71

Los métodos de instancia deben invocarse desde una instancia. Su método setLoanItem es un método de instancia (no tiene el modificador static), que necesita estar para funcionar (porque está estableciendo un valor en la instancia a la que se llama (this)). Es necesario crear una instancia de la clase antes de poder llamar al método en él: (. Por cierto que sería mejor usar un valor lógico en lugar de una cadena que contiene "Sí")

Media media = new Media(); 
media.setLoanItem("Yes"); 

+0

Obtengo una excepción de puntero nulo cuando hago esto ... ¿Cuál crees que es el problema? Avíseme si necesita algún código. ¡Gracias! (¡Estuve atascado en esto durante 3 horas y media ahora!) –

+0

@Ruchir: vea http://stackoverflow.com/questions/218384/what-is-a-null-pointer-exception-and-how-do-i -arreglalo –

0

usted necesidad de separar correctamente los datos estáticos de los datos de instancia. En su código, onLoan y setLoanItem() son miembros de la instancia. Si desea hacer referencia/llamarlos, debe hacerlo a través de una instancia. Por lo que desea, ya sea

public void loanItem() { 
    this.media.setLoanItem("Yes"); 
} 

o

public void loanItem(Media object) { 
    object.setLoanItem("Yes"); 
} 

dependiendo de cómo desea pasar esa instancia alrededor.

2

setLoanItem() no es un método estático, es un método de instancia, lo que significa que pertenece a una instancia determinada de esa clase en lugar de que clase misma.

Esencialmente, no ha especificado en qué objeto de medios desea llamar al método, solo ha especificado el nombre de la clase. Puede haber miles de objetos multimedia y el compilador no tiene forma de saber a qué se refiere, por lo que genera un error en consecuencia.

es probable que desee pasar un objeto de medios en los que llamar al método:

public void loanItem(Media m) { 
    m.setLoanItem("Yes"); 
} 
Cuestiones relacionadas