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
构造函数非静态
Foo
(或直接myCursor
)对象传递给MySurfaceView
构造函数非静态
静态嵌套类不能访问封闭类的其他成员,如中所述,这使我想知道为什么需要MySurfaceView类是静态的?您可以将其设置为嵌套类静态嵌套类无法访问封闭类的其他成员,如中所述,这让我想知道为什么需要MySurfaceView类是静态的?您可以将其设置为嵌套类您可以修改
静态
成员。您正在考虑final
?MySurfaceView是否需要公开?一个public Cursor getCursor()
?您可以修改静态
成员。你在考虑final
?MySurfaceView是否需要公开?一个public Cursor getCursor()
?它需要是静态的才能正确膨胀。你在膨胀活动?!能跑吗?!我想是的。在我决定添加更多功能之前,该程序一直运行良好,我一直在尝试使用myCursor添加这些内容。它需要是静态的才能正确膨胀。你在膨胀活动?!能跑吗?!我想是的。在我决定添加更多功能之前,该程序一直运行良好,我一直在尝试使用myCursor添加这些功能。