java - solucion - "Error en el método no estático no se puede hacer referencia desde un contexto estático"
non static method cannot be referenced from a static context (4)
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í").
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!
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.
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 compilador 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");
}