"Нестатический метод не может ссылаться на статический контекст"

У меня есть класс с именем Media, у которого есть метод с именем setLoanItem:

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

Я пытаюсь вызвать этот метод из класса с именем GUI следующим образом:

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

Но я получаю сообщение об ошибке

нестатический метод setLoanItem (java.lang.String) не может ссылаться на статический контекст

Я просто пытаюсь изменить переменную onloan в классе Media на "Да" из класса GUI.

Я просмотрел другие темы с тем же сообщением об ошибке, но ничего не щелкает!

Ответ 1

Методы экземпляров необходимо вызывать из экземпляра. Ваш метод setLoanItem - это метод экземпляра (он не имеет модификатора static), который должен быть для того, чтобы функционировать (потому что он задает значение для экземпляра, на который он вызвал (this))). Вам нужно создать экземпляр класса, прежде чем вы сможете вызвать метод на нем:

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

(Btw было бы лучше использовать логическое значение вместо строки, содержащей "Да".)

Ответ 2

setLoanItem - это метод экземпляра, то есть вам нужен экземпляр класса Media для его вызова. Вы пытаетесь вызвать его по самому типу Media.

Возможно, вам захочется ознакомиться с некоторыми базовыми объектно-ориентированными учебниками, чтобы узнать, как работают члены static/instance.

Ответ 3

setLoanItem() не является статическим методом, это метод экземпляра, что означает, что он принадлежит к конкретному экземпляру этого класса, а не к самому классу.

По сути, вы не указали, на какой медиа-объект вы хотите вызвать метод, вы указали только имя класса. Там могут быть тысячи медиа-объектов, и компилятор не знает, что вы имели в виду, поэтому он генерирует ошибку соответственно.

Вероятно, вы захотите передать медиа-объект, на который вызывается метод:

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

Ответ 4

Вам нужно правильно отделить статические данные от данных экземпляра. В вашем коде onLoan и setLoanItem() являются членами экземпляра. Если вы хотите ссылаться/называть их, вы должны сделать это через экземпляр. Таким образом, вы либо хотите

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

или

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

в зависимости от того, как вы хотите передать этот экземпляр.