“Error en el método no estático no se puede hacer referencia desde un contexto estático”

Tengo una clase llamada Media que tiene un método llamado setLoanItem :

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

Intento llamar a este método desde una clase llamada GUI de la siguiente manera:

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

Pero estoy obteniendo el error

Método no estático No se puede hacer referencia a setLoanItem (java.lang.String) desde un contexto estático

Simplemente trato de cambiar la variable onloan en la clase Media a “Sí” desde la clase de la GUI .

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

Los métodos de instancia necesitan ser llamados 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 )). Debe crear una instancia de la clase antes de poder invocar el método en ella:

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

(Por cierto, sería mejor usar un booleano en lugar de una cadena que contenga “Sí”).

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 de estática / instancia.

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

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

Probablemente desee pasar un objeto multimedia en el que llamar al método:

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

Necesita separar correctamente los datos estáticos de los datos de instancia. En su código, onLoan y setLoanItem() son miembros de instancia. Si desea hacer referencia / llamarlos, debe hacerlo a través de una instancia. Entonces, o quieres

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

o

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

dependiendo de cómo quiera pasar esa instancia.