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