Поскольку getText()
не является статичным, вы не можете вызывать его из статического метода.
Чтобы понять почему, вы должны понимать разницу между ними.
Методы экземпляра (нестатические) работают с объектами определенного типа (класса). Они создаются с новым, как это:
SomeClass myObject = new SomeClass();
Чтобы вызвать метод экземпляра, вы вызываете его для экземпляра (myObject
):
myObject.getText(...)
Однако статический метод / поле можно вызывать только непосредственно для типа, скажем так:
Предыдущее утверждение неверно. Можно также ссылаться на статические поля с помощью ссылки на объект, такой как myObject.staticMethod()
, но это не рекомендуется, поскольку не дает понять, что они являются переменными класса.
... = SomeClass.final
И эти два не могут работать вместе, поскольку они работают в разных пространствах данных (данные экземпляра и данные класса)
Позвольте мне попытаться объяснить. Рассмотрим этот класс (psuedocode):
class Test {
string somedata = "99";
string getText() { return somedata; }
static string TTT = "0";
}
Теперь у меня есть следующий вариант использования:
Test item1 = new Test();
item1.somedata = "200";
Test item2 = new Test();
Test.TTT = "1";
Какие значения?
Хорошо
in item1 TTT = 1 and somedata = 200
in item2 TTT = 1 and somedata = 99
Другими словами, TTT
- это элемент данных, который используется всеми экземплярами типа. Так что нет смысла говорить
class Test {
string somedata = "99";
string getText() { return somedata; }
static string TTT = getText(); // error there is is no somedata at this point
}
Итак, вопрос в том, почему TTT статичен или почему getText () не статичен?
Удалите static
, и эта ошибка должна пройти, но без понимания того, что делает ваш тип, это всего лишь липкая штукатурка до следующей ошибки. Какие требования getText()
требуют, чтобы он был нестатичным?