Ошибка «Нестатический метод не может быть указан из статического контекста» - PullRequest
67 голосов
/ 07 февраля 2011

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

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

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

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

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

Нестатический метод setLoanItem (java.lang.String) не может быть указан из статического контекста

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

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

Ответы [ 4 ]

72 голосов
/ 07 февраля 2011

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

Вам нужно создать экземпляр класса, прежде чем вы сможете вызывать метод для него:

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

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

11 голосов
/ 07 февраля 2011

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

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

2 голосов
/ 07 февраля 2011

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

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

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

public void loanItem(Media m) {
    m.setLoanItem("Yes");
}
0 голосов
/ 07 февраля 2011

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

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

, либо

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...