getText()
は非静的なので、静的メソッドから呼び出すことはできません。
理由を理解するには、この2つの違いを理解する必要があります。
インスタンス(非静的)メソッドは、特定のタイプ(クラス)のオブジェクトに対して機能します。これらは、次のような新しいもので作成されます。
SomeClass myObject = new SomeClass();
インスタンスメソッドを呼び出すには、インスタンスで呼び出します(myObject
):
myObject.getText(...)
ただし、静的メソッド/フィールドは、次のように直接型でのみ呼び出すこと
ができます。前のステートメントは正しくありません。同様にオブジェクト参照で静的フィールドを参照することもできますが、 myObject.staticMethod()
クラス変数であることを明確にしないため、これはお勧めできません。
... = SomeClass.final
また、2つは異なるデータスペース(インスタンスデータとクラスデータ)で動作するため、一緒に動作することはできません。
私が試して説明させてください。このクラス(疑似コード)を考えます。
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()
非静的であることを要求する要件は何ですか?