Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我需要在静态类中使用非静态变量。。。如何避开这个问题?_Java_Android_Static - Fatal编程技术网

Java 我需要在静态类中使用非静态变量。。。如何避开这个问题?

Java 我需要在静态类中使用非静态变量。。。如何避开这个问题?,java,android,static,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 o

以下是相关问题的概述:

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设置为静态,因为这需要将几乎所有函数都更改为静态。有什么提示吗?

为什么内部类是静态的?如果删除静态修饰符,那么它将有权访问其封闭类,并随后访问myCursor

如果它必须是静态的,那么您可以将必需的
Foo
对象传递到它的构造函数中,并将其用作对封闭类的引用。虽然没有那么整洁,但它仍然可以工作

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

在一个内部类上,它的行为不同(不一定是逻辑上的!)它删除了从内部类到外部类的引用,因此它本质上是一个完全独立的类,只是位于另一个类中


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

为什么内部类是静态的?如果删除静态修饰符,那么它将有权访问其封闭类,并随后访问myCursor

如果它必须是静态的,那么您可以将必需的
Foo
对象传递到它的构造函数中,并将其用作对封闭类的引用。虽然没有那么整洁,但它仍然可以工作

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

在一个内部类上,它的行为不同(不一定是逻辑上的!)它删除了从内部类到外部类的引用,因此它本质上是一个完全独立的类,只是位于另一个类中

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

两种选择

  • Foo
    (或直接
    myCursor
    )对象传递给
    MySurfaceView
    构造函数
  • 使MySurfaceView
    非静态
  • 两个选择

  • Foo
    (或直接
    myCursor
    )对象传递给
    MySurfaceView
    构造函数
  • 使MySurfaceView
    非静态

  • 静态嵌套类不能访问封闭类的其他成员,如中所述,这使我想知道为什么需要MySurfaceView类是静态的?您可以将其设置为嵌套类

    静态嵌套类无法访问封闭类的其他成员,如中所述,这让我想知道为什么需要MySurfaceView类是静态的?您可以将其设置为嵌套类

    您可以修改
    静态
    成员。您正在考虑
    final
    ?MySurfaceView
    是否需要公开?一个
    public Cursor getCursor()
    ?您可以修改
    静态
    成员。你在考虑
    final
    ?MySurfaceView
    是否需要公开?一个
    public Cursor getCursor()
    ?它需要是静态的才能正确膨胀。你在膨胀活动?!能跑吗?!我想是的。在我决定添加更多功能之前,该程序一直运行良好,我一直在尝试使用myCursor添加这些内容。它需要是静态的才能正确膨胀。你在膨胀活动?!能跑吗?!我想是的。在我决定添加更多功能之前,该程序一直运行良好,我一直在尝试使用myCursor添加这些功能。