java - Java 中的匿名类

标签 java class anonymous

是否可以像这样在 Java 中创建匿名类:

public static void main(String[] args) {

    AnonymousClass a = new AnonymousClass() {
        int whatever = 1;
    };

    System.out.println(a.whatever);
}

我以为这会起作用,但事实并非如此。我是否误解了匿名类的某些内容,或者只是存在语法错误?

最佳答案

可以这样做:

public static void main(String[] args) {
    System.out.println(new Object() {
      int whatever = 1;
    }.whatever);
}

也就是说,您只能直接从实例化表达式中取消引用字段和方法。 [编辑:根据注释,您可以在编译器为您推断类型的地方使用它 - 这恰好是实例表达式,或者作为您传递给的泛型方法的返回值。]您不能将其存储在变量中并在那里使用字段/方法,因此它不如匿名类有用,例如C#。

编辑:您可以如其他人之前所述,声明一个方法局部类:

public static void main(String[] args) {
    class Local {
      int whatever = 1;
    }
    Local local = new Local();
    System.out.println(local);
}

不过,有点啰嗦,就像非静态内部类和常规匿名类一样,它保留了对封闭 this 的隐式引用(在非静态方法中)。

关于java - Java 中的匿名类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8431054/

相关文章:

function - golang 闭包(匿名函数)捕获错误的参数值

java - 无法在日志附加器中 Autowiring spring bean

java - 如何在 OS X 中使用 Java 找到用户的 'Documents' 文件夹?

html - 引用 CSS 类

objective-c - 设置类(class)的区别?

python - 多个匿名 Python 函数的包装器

c# - VB.NET 匿名委托(delegate)的等效 C# 代码是什么?

java - 即使将 jsr94.jar 安装在结构正确的 m2 文件夹中,Maven 也无法检测到 jsr94.jar

java - 使用 HashMap 获取重复出现的情况

Java Swing : Add resources at run time