Java 有没有办法显式引用非静态内部类实例?
您可以显式引用顶级类的类实例,如下所示:Java 有没有办法显式引用非静态内部类实例?,java,android,anonymous-inner-class,Java,Android,Anonymous Inner Class,您可以显式引用顶级类的类实例,如下所示: public class Dog { public void subscribeDogToTreats() { Set<?> listenerSet = map.get("treats"); listenerSet.add(Dog.this); map.put("treats", listenerSet); } } 在现实世界中,我想这样做的例子是将OnPageChangeListeners添加到viewpa
public class Dog {
public void subscribeDogToTreats() {
Set<?> listenerSet = map.get("treats");
listenerSet.add(Dog.this);
map.put("treats", listenerSet);
}
}
在现实世界中,我想这样做的例子是将OnPageChangeListeners添加到viewpagers,并在Android中完成转换后将其删除。我知道关键字this引用了匿名内部类,但是当我遇到这样的情况时,我必须通过打印类名来证明这一点。我害怕有一个难以捕捉的bug,我引用的是外部类实例,我想引用的是内部类实例,反之亦然
我更喜欢使用Dog.this或InnerClass.this来显式显示,我想知道是否有一种方法可以为非静态内部类实现这一点,或者其他开发人员如何处理这一点(在Android Studio中,这两个引用的颜色编码相同)。除了记住这总是指作用域中最内部的类实例之外,还有什么方法可以使其显式化吗?您所描述的是您必须根据Java语言规范执行的操作。在Java中,没有办法改变
this
的含义,也没有办法改变封闭类的限定条件,如果您正试图这样做的话。如果有帮助的话,您可以随时创建自己的局部变量作为快捷方式
public class Dog {
void initializeHunger() {
OnHungerChangeListener listener = new OnHungerChangeListener() {
public void onHungerChanged(int stomachCapacity) {
if(stomachCapacity == Stomach.FULL) {
stomach.removeOnHungerChangeListener(OnHungerChangeListener.this);
}
}
}
stomach.addOnHunderChangeListener(listener);