Поскольку getText()
нестатичен, вы не можете вызвать его из статического метода.
Чтобы понять почему, вы должны понимать разницу между ними.
Экземплярные (нестатические) методы работают с объектами определенного типа (класса). Они создаются с помощью нового, например:
SomeClass myObject = new SomeClass();
Чтобы вызвать метод экземпляра, вы вызываете его в экземпляре (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()
требуют, чтобы он был нестатическим?
person
Preet Sangha
schedule
11.02.2011
getString()
, когда они вам нужны. Таким образом, ваше приложение правильно адаптируется к изменению пользователем выбранного языка. - person CommonsWare   schedule 11.02.2011