J'ai une classe nommée Media
qui a une méthode nommée setLoanItem
:
public void setLoanItem(String 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.String) 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
en "Oui" à partir de la classe GUI
.
J'ai regardé d'autres sujets avec le même message d'erreur mais rien ne se fait en cliquant!
Les méthodes d'instance doivent être appelées à partir d'une instance. Votre méthode setLoanItem
est une méthode d'instance (elle n'a pas le modificateur static
), ce dont elle a besoin 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 tutoriels de base orientés objet 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é d'objet multimédia quoi sur lequel vous souhaitez appeler la méthode, vous avez uniquement spécifié le nom de la classe. Il peut y avoir des milliers d’objets multimédias et le compilateur n’a aucun moyen de savoir de quoi vous parlez. Il en résulte une erreur.
Vous souhaiterez probablement passer un objet 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 souhaitez les référencer/les appeler, vous devez le faire via une instance. Donc soit vous voulez
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.