Puisqu'il getText()
n'est pas statique, vous ne pouvez pas l'appeler à partir d'une méthode statique.
Pour comprendre pourquoi, vous devez comprendre la différence entre les deux.
Les méthodes d'instance (non statiques) fonctionnent sur des objets d'un type particulier (la classe). Ceux-ci sont créés avec le nouveau comme ceci:
SomeClass myObject = new SomeClass();
Pour appeler une méthode d'instance, vous l'appelez sur l'instance ( myObject
):
myObject.getText(...)
Cependant, une méthode / un champ statique ne peut être appelé directement que sur le type, disons comme ceci:
L'instruction précédente n'est pas correcte. On peut également faire référence à des champs statiques avec une référence d'objet comme myObject.staticMethod()
mais cela est déconseillé car cela n'indique pas clairement qu'il s'agit de variables de classe.
... = SomeClass.final
Et les deux ne peuvent pas fonctionner ensemble car ils opèrent sur des espaces de données différents (données d'instance et données de classe)
Laissez-moi essayer de vous expliquer. Considérez cette classe (psuedocode):
class Test {
string somedata = "99";
string getText() { return somedata; }
static string TTT = "0";
}
Maintenant, j'ai le cas d'utilisation suivant:
Test item1 = new Test();
item1.somedata = "200";
Test item2 = new Test();
Test.TTT = "1";
Quelles sont les valeurs?
bien
in item1 TTT = 1 and somedata = 200
in item2 TTT = 1 and somedata = 99
En d'autres termes, TTT
est une donnée partagée par toutes les instances du type. Donc ça n'a aucun sens de dire
class Test {
string somedata = "99";
string getText() { return somedata; }
static string TTT = getText(); // error there is is no somedata at this point
}
La question est donc de savoir pourquoi TTT est statique ou pourquoi getText () n'est-il pas statique?
Retirez le static
et il devrait dépasser cette erreur - mais sans comprendre ce que fait votre type, ce n'est qu'un plâtre qui colle jusqu'à la prochaine erreur. Quelles sont les exigences getText()
qui exigent qu'il soit non statique?