Dado getText()
que no es estático, no puede llamarlo desde un método estático.
Para entender por qué, debes entender la diferencia entre los dos.
Los métodos de instancia (no estáticos) funcionan en objetos que son de un tipo particular (la clase). Estos se crean con lo nuevo así:
SomeClass myObject = new SomeClass();
Para llamar a un método de instancia, lo llama en la instancia ( myObject
):
myObject.getText(...)
Sin embargo, solo se puede llamar a un método / campo estático en el tipo directamente, digamos así:
La declaración anterior no es correcta. También se puede hacer referencia a campos estáticos con una referencia de objeto como, myObject.staticMethod()
pero esto no se recomienda porque no deja en claro que son variables de clase.
... = SomeClass.final
Y los dos no pueden trabajar juntos ya que operan en diferentes espacios de datos (datos de instancia y datos de clase)
Déjame intentar explicarte. Considere esta clase (psuedocode):
class Test {
string somedata = "99";
string getText() { return somedata; }
static string TTT = "0";
}
Ahora tengo el siguiente caso de uso:
Test item1 = new Test();
item1.somedata = "200";
Test item2 = new Test();
Test.TTT = "1";
¿Cuáles son los valores?
Bien
in item1 TTT = 1 and somedata = 200
in item2 TTT = 1 and somedata = 99
En otras palabras, TTT
es un dato compartido por todas las instancias del tipo. Entonces no tiene sentido decir
class Test {
string somedata = "99";
string getText() { return somedata; }
static string TTT = getText(); // error there is is no somedata at this point
}
Entonces, la pregunta es ¿por qué TTT es estático o por qué getText () no es estático?
Quite el static
y debería superar este error, pero sin entender qué hace su tipo, es solo un yeso pegajoso hasta el siguiente error. ¿Cuáles son los requisitos getText()
que requieren que sea no estático?