2011-08-04 4 views
0

は、関連する問題の輪郭のようなものだ:私は静的クラス内で非静的変数を使用する必要があります...これを回避するには?ここ

public class Foo extends Activity{ 

    Cursor myCursor; 

    public void onCreate(Bundle savedInstanceState) { 
     //I initialize myCursor here 
    } 

    public void setCursor(){ 
     //When we are interested in a different set of data, the cursor changes here 
    } 

    public static class MySurfaceView extends SurfaceView implements Runnable{ 
     public void run(){ 
      //I need to access myCursor here 
     } 
    } 
} 

私は静的クラス内から非静的変数にアクセスすることはできませんが、それはほとんどすべての変更が必要となるので、私はMyCursorとは、静的にすることはできません知っています私の機能の静的に。任意のヒント?

+0

'static 'メンバを変更することができます。あなたは「最終」を考えていますか? –

+0

'MySurfaceView'は公開される必要がありますか? – jjnguy

+0

'public Cursor getCursor()'? – talnicolas

答えて

1

MySurfaceViewコンストラクタへの選択肢のカップル

  1. パスFoo(又は直接myCursor)オブジェクト。
  2. MySurfaceView非静的
-1

staticは変更できないという意味ではなく、Classのスコープであり、Classのスコープではありません。 Classのメンバーはstaticで、クラスのインスタンスは参照していません。

finalは、参照を変更できないことを意味します。

内部クラスがstaticと定義されているのはなぜですか?問題が解決するとは限りません。

+0

"はクラスに限定され、クラスのインスタンスには適用されません。 - それが問題です。それは変更することはできません。静的コンテキストから変更することはできません。 – jjnguy

3

なぜ内部クラスは静的ですか?スタティック・モディファイアを削除すると、そのモディファイアを囲むクラスにアクセスし、続いてmyCursorにアクセスできます。

静的でなければならない場合は、必要なFooオブジェクトをそのコンストラクタに渡して、そのオブジェクトを囲むクラスへの参照として使用できます。きちんとしたものではありませんが、それでも動作するはずです。

static(フィールド上)は、オブジェクトではないクラスに属することを意味します。 finalと混乱している可能性があります。つまり、参照を変更することはできません。

内部クラスでは、動作が異なります(必ずしも論理的には必要ありません)。内部クラスから外部クラスへの参照が削除されるため、本質的に別のクラス内にある完全に別のクラスです。

詳細な回答が必要な場合は、アプリケーションのコンテキストに関する詳細を提供する必要があります。そのコードスニペットから静的であるべきかどうかを言うことは難しいです。

+0

適切に膨張させるには静的である必要があります。 – Kalina

+1

アクティビティを膨らませていますか? Runnable ?! – user802421

+0

それは悪いことですか? – Kalina

0

静的ネストされたクラスは、あなたが静的であるとMySurfaceViewクラスが必要なのか、なぜ私は思ってしまうた、java tutorialsに述べたように、外側のクラスの他のメンバーへのアクセス権を持っていないのですか?作りますかあなたはそれを入れ子にしたクラスにすることができます

関連する問題