Erreur «La méthode non statique ne peut pas être référencée à partir d’un contexte statique»

J’ai une classe nommée Media qui a une méthode nommée setLoanItem :

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

J’essaie d’appeler cette méthode à partir d’une classe nommée GUI de la manière suivante:

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

Mais je reçois l’erreur

la méthode non statique setLoanItem (java.lang.Ssortingng) ne peut pas être référencée à partir d’un contexte statique

J’essaie simplement de changer la variable onloan dans la classe Media à “Yes” de la classe GUI .

J’ai regardé d’autres sujets avec le même message d’erreur mais rien ne clique!

Les méthodes d’instance doivent être appelées à partir d’une instance. Votre méthode setLoanItem est une méthode d’instance (elle ne possède pas le modificateur static ), qui doit être utilisée pour fonctionner (car elle définit une valeur sur l’instance à laquelle elle est appelée ( this )). Vous devez créer une instance de la classe avant de pouvoir appeler la méthode dessus:

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

(Btw il serait préférable d’utiliser un booléen au lieu d’une chaîne contenant “Oui”.)

setLoanItem est une méthode d’instance, ce qui signifie que vous avez besoin d’une instance de la classe Media pour l’appeler. Vous essayez de l’appeler sur le type de média lui-même.

Vous voudrez peut-être examiner certains didacticiels de base sur les objects pour voir comment fonctionnent les membres statiques / d’instance.

setLoanItem() n’est pas une méthode statique, c’est une méthode d’instance, ce qui signifie qu’elle appartient à une instance particulière de cette classe plutôt qu’à cette classe elle-même.

Essentiellement, vous n’avez pas spécifié l’object média sur lequel vous souhaitez appeler la méthode, vous avez uniquement spécifié le nom de la classe. Il pourrait y avoir des milliers d’objects multimédia et le compilateur n’a aucun moyen de savoir ce que vous vouliez dire, il génère donc une erreur en conséquence.

Vous voulez probablement passer un object multimédia sur lequel appeler la méthode:

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

Vous devez séparer correctement les données statiques des données d’instance. Dans votre code, onLoan et setLoanItem() sont des membres d’instance. Si vous voulez les référencer / les appeler, vous devez le faire via une instance. Donc vous voulez soit

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

ou

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

en fonction de la manière dont vous souhaitez transmettre cette instance.