我需要在静态类中使用非静态变量...如何解决这个问题?

时间:2011-08-04 16:49:40

标签: java android static

以下是相关问题的概述:

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成为静态因为它需要将我的几乎所有函数都更改为静态。有什么提示吗?

3 个答案:

答案 0 :(得分:3)

为什么内部类是静态的?如果删除静态修饰符,则它将可以访问其封闭类,然后访问myCursor。

如果它必须是静态的,那么你可以将必要的Foo对象传递给它的构造函数,并将其用作对封闭类的引用。不是很整洁,但它应该仍然有效。

无论如何,static(在字段上)意味着它属于类而不是对象。您可能会对final感到困惑,这意味着无法修改引用?

在内部类中,它的行为不同(并且不一定是逻辑上的!)它将引用从内部类移除到外部类,因此它本质上是一个完全独立的类,只是坐在另一个类中。

如果您想要更详细的答案,则必须提供有关应用程序上下文的更多详细信息 - 很难说该代码片段应该和不应该是静态的。

答案 1 :(得分:1)

几个选择

  1. Foo(或直接myCursor)对象传递给MySurfaceView构造函数。
  2. MySurfaceView非静态

答案 2 :(得分:0)

静态嵌套类无法访问封闭类的其他成员,如java tutorials中所述,这让我想知道为什么你需要MySurfaceView类是静态的?你可以把它变成一个嵌套的类