-3

次のコードがあります。

private static AppWidgetService mInstance = null;

public static void startRefresh() {

        AppWidgetProvider.setRefreshingState(mInstance
                .getApplicationContext());
        AppWidgetManager.refreshHandler(mInstance.getApplicationContext());
    }

実行時に失敗することもあれば、パスすることもあります。

明白な例外の場合:

cannot call a non-static method from a static context

mInstance静的なので混乱しています。

したがって、そのインスタンス メソッドは静的コンテキストから呼び出すことができます。番号?

それでは、時々失敗するのはどうしてですか?

4

2 に答える 2

1

静的関数からは、静的関数のみを呼び出すか、静的変数を使用できます。リンクは実行時に行われます。したがって、コンパイルは問題ありませんが、実行時に呼び出しが行われると失敗します。その呼び出しを行う場合は、関数を非静的にしてみてください。

また

静的メソッドから非静的メソッドを呼び出す唯一の方法は、非静的メソッドを含むクラスのインスタンスを持つことです。定義上、非静的メソッドはあるクラスのインスタンスで呼び出されるメソッドですが、静的メソッドはクラス自体に属します。

于 2013-08-22T09:09:26.100 に答える