Como getText()
não é estático, você não pode chamá-lo de um método estático.
Para entender o porquê, você precisa entender a diferença entre os dois.
Métodos de instância (não estáticos) funcionam em objetos que são de um tipo específico (a classe). Eles são criados com o novo assim:
SomeClass myObject = new SomeClass();
Para chamar um método de instância, você o chama na instância ( myObject
):
myObject.getText(...)
No entanto, um método / campo estático pode ser chamado apenas no tipo diretamente, digamos assim:
A declaração anterior não está correta. Também se pode referir a campos estáticos com uma referência de objeto como, myObject.staticMethod()
mas isso é desencorajado porque não deixa claro que são variáveis de classe.
... = SomeClass.final
E os dois não podem trabalhar juntos, pois operam em espaços de dados diferentes (dados de instância e dados de classe)
Deixe-me tentar explicar. Considere esta classe (psuedocode):
class Test {
string somedata = "99";
string getText() { return somedata; }
static string TTT = "0";
}
Agora tenho o seguinte caso de uso:
Test item1 = new Test();
item1.somedata = "200";
Test item2 = new Test();
Test.TTT = "1";
Quais são os valores?
Bem
in item1 TTT = 1 and somedata = 200
in item2 TTT = 1 and somedata = 99
Em outras palavras, TTT
é um dado compartilhado por todas as instâncias do tipo. Então não faz sentido dizer
class Test {
string somedata = "99";
string getText() { return somedata; }
static string TTT = getText(); // error there is is no somedata at this point
}
Portanto, a questão é por que o TTT é estático ou por que getText () não é estático?
Remova o static
e ele deve passar por esse erro - mas sem entender o que seu tipo faz é apenas um esparadrapo até o próximo erro. Quais são os requisitos getText()
que exigem que seja não estático?