java - 在Java中,如何从 static 内部类访问外部类的private 成员

  显示原文与译文双语对照的内容
70 4
public class OuterClass extends Something{
 private int unit = 0;
 private void methodX(int num){
//Do something here
 }
 public static class InnerClass extends BroadcastReceiver {
 @Override
 public void onReceive(Context context, Intent intent) { 
//Need to call methodX(100) here 
 }
 } 
}

我正在做一个应用程序,它很好。但当我在使用

static OuterClass instance;

在OuterClass中,并通过

instance.methodX(100)

从内部类,它导致内存泄漏。如果我从内部类广播接收器中删除 static 关键字未触发。

这是我的Manifest 文件的一部分。

<receiver
 android:name=".OuterClass$InnerClass"
 android:enabled="true"
 android:exported="true">
 <intent-filter> 
 <action android:name="com.xyz.abc.RESULT"/> 
 <category android:name="android.intent.category.DEFAULT"/>
 </intent-filter>
</receiver>

这工作正常,但它有一些内存泄漏。不需要使用外部类的static 实例,就需要从 static 内部类访问外部类方法,而没有内存 leak.for 。

如果有人可以帮助我从内部类访问 outerClass methodX,我真的很感激。

时间:原作者:0个回答

62 2

你可以将该方法标记为 methodX()之后,你将能够在 static 内部类中访问该方法。

原作者:
122 0

声明一个 static 内部类类似于创建一个新文件,在这个术语中,需要一个outter类实例来工作。

非静态内部类的工作方式类似于非静态字段:它们是特定实例。意味着需要outter对象的实例来初始化新的内部对象。

当它是 static 时,你不需要outter类的对象来工作。

对于非静态内部类,可以执行以下操作:

outter.new Inner()

并访问嵌套在其中的类。

但是由于类是 static,所以你必须通过像正常一样的实例。I.e.

new Outter.Inner(outterInstance)

然而,: 类扩展BroadcastReceiver之后,它初始化为一个空的构造函数。因为BroadcastReceiver是系统初始化和处理的系统,所以使用值的构造函数将永远不会被使用。在空构造函数中创建一个新实例,或者将所有的变量移到当前的内部类中

由于BroadcastReceiver需要一个空的构造函数,这样做是不可能的:

public Inner(Outter instance)

它不会被初始化,你可能会从它得到异常。但是,你可以这样做:

public Inner(){
 outter = new Outter();
}

或者,将所有的outter类域和方法移到BroadcastReceiver中。

你应该把这篇文章写在主题栏上。

原作者:
...