- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
考虑以下几点:
public class OuterClass {
private String attribute = "outer";
class InnerClass {
private String attribute = "inner";
public doSomething() {
System.out.println(this.attribute);
System.out.println(OuterClass.this.attribute);
}
}
}
InnerClass 不是静态的,必须针对其外部类的实例创建。
new OuterClass().new InnerClass()
常规 innerclass 持有对创建它的外部类的引用,可以使用 Outer.this.myAttribute
访问(在这方面特别有用存在“命名冲突”的情况
创建匿名内部类时也是一样:创建的匿名内部类持有外部类的引用,这就是为什么在方法内部声明谓词时(匿名方法-局部内部类),我们仍然可以访问,内部类内部类,外部类的变量而不必将它们声明为 final(而我们应该将变量作为方法参数传递。
public class OuterClass {
// Do not need to be final because the innerclass keeps a reference to the outerclass
// even if it's an anonymous innerclass, it's still an innerclass
private String classAttribute = "classAttribute";
public Runnable doSomething() {
// Should be final because the variable lives on the stack and the reference to this object
// must be copied so that the String object is still accessible when the stack frame is destroyed
final String localVar = "localVar";
return new Runnable() {
@Override
public void run() {
System.out.println(classAttribute);
System.out.println(localVar);
}
};
}
}
最后,我们可以在接口(interface)中声明常量,这些常量隐式标记为 public static final。对象可以是常量。因此,作为匿名内部类创建的对象是接口(interface)的合法常量。
例如,在使用 Guava 时,我通常会在接口(interface)中声明函数和谓词,这样我就可以利用有用的 Guava 函数,例如 Maps.uniqueIndex(...)
。
public interface AlternativeNameable {
String getAlternativeName();
Function<AlternativeNameable,String> GET_ALTERNATIVE_NAME = new Function<AlternativeNameable,String>() {
@Override
public String apply(AlternativeNameable input) {
return input.getAlternativeName();
}
};
}
所以你可能会问自己我的问题是什么?在这里:
当将匿名类声明为接口(interface)常量时(参见我的最后一个代码示例),匿名内部类对哪个外部类持有引用?
最佳答案
接口(interface)中定义的字段 always implicitly have the modifiers public static final
.它是一个常数,因此它没有关联的外部类。
此外,member types of interfaces are implicitly public and static ,这也适用于匿名类。
关于java - 在接口(interface) : what is the outerclass? 中声明的匿名内部类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13306319/
这个问题在这里已经有了答案: Getting hold of the outer class object from the inner class object (7 个答案) 关闭 9 年前。
这个问题已经有答案了: Java: Class.this (5 个回答) 已关闭 3 年前。 嗨,我正在阅读 myBatis 的源代码,我的问题是我不明白 SqlSessionManager.this
以下是合法的(据我所知): class Outer { void someMethod() { // do something } class Inner {
-non-static- 内部类对外部类的所有常规成员具有完全可访问性。但是还有另一种方法可以使用 (outerClass.this.regularMember).. 访问这些成员,请查看以下代码:
我正在尝试使用 OuterClass.this 从 ResultCallback 接口(interface)访问顶级 Activity (MainActivity),但错误显示: cannot res
我仍在学习,目前正在尝试使用嵌套的 STATIC 类实现 DoublyLinkedLists 并收到以下错误: 在范围内无法访问 OuterClass.StaticNestedClass 类型的封闭实
考虑以下几点: public class OuterClass { private String attribute = "outer"; class InnerClass {
我有两个类:OuterClass 和 InnerClass。 InnerClass 是 OuterClass 的私有(private)成员,应使用 InnerClass(int) 构造函数在 Oute
我注意到在 OuterClass 上手动指定 typedef 代价太大,有时会导致令人尴尬的错误。所以我决定在 OuterClass 上制作一个复制粘贴友好的 typedef。这是我得到的: #inc
我是一名优秀的程序员,十分优秀!