Поскольку getText()
он нестатичен, вы не можете вызвать его из статического метода.
Чтобы понять почему, вы должны понимать разницу между ними.
Экземплярные (нестатические) методы работают с объектами определенного типа (класса). Они создаются с помощью нового, например:
SomeClass myObject = new SomeClass();
Чтобы вызвать метод экземпляра, вы вызываете его в instance ( myObject
):
myObject.getText(...)
Однако статический метод / поле может быть вызван только для типа напрямую, скажем так:
Предыдущий оператор неверен. Можно также ссылаться на статические поля со ссылкой на объект, например, myObject.staticMethod()
но это не рекомендуется, потому что это не дает понять, что они являются переменными класса.
... = SomeClass.final
И они не могут работать вместе, поскольку работают с разными пространствами данных (данные экземпляра и данные класса).
Позвольте мне попытаться объяснить. Рассмотрим этот класс (псевдокод):
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()
, чтобы он был нестатичным?