是否可以像这样在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);
}


但是,与非静态内部类和常规的匿名类一样,它有点罗word,它保留了对封闭的this的隐式引用(在非静态方法中)。

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

10-12 06:09