在匿名类中定义自定义函数/属性



我想在下定义匿名类中的属性和函数

ExistingExtendableJavaClass aClass = new ExistingExtendableJavaClass() {
public String someProperty;
public String getMyProperty() { return someProperty }
});

但是这些电话不起作用

aClass.someProperty // not accessible
aClass.getMyProperty() // not accessible

我知道,因为ExistingExtendableJavaClass没有这些,但我的匿名者有这些。我怎样才能做到这一点?

它们可以很好地访问:

new ExistingExtendable() {
public void foo() {}
}.foo();

效果很好。

但如果你写:

ExistingExtendable x = new ExistingExtendable() {
public void foo() {}
};
x.foo();

这行不通。出于同样的原因,这不起作用:

Object o = new String();
o.toLowerCase(); // nope

问题是您的匿名类没有名称,因此,您无法表示其类型。我们可以通过用String o替换Object o来修复字符串示例,但没有等效的String

但是,这是匿名内部类的要点

如果您希望这些是可命名的,那么您就不希望有一个匿名的内部类。询问:";我想要一个匿名的内部类,但我希望我在其中声明的新成员是可访问的;就像在问:";我想要一个圆圈,但是。。带有角";。

您可以使方法成为本地内部类,现在您有了名称:

public void example(String x) {
class IAmAMethodLocalClass extends ExistingExtendableJavaClass {
String someProperty; // making them public is quite useless.
String foo() {
System.out.println(x); // you can access x here.
}
}
IAmAMethodLocalClass hello = new IAmAMethodLocalClass();
hello.someProperty = "It works!";
}

匿名内部类与此方法本地类的内容相同,只是它避免命名类型。在这种情况下,需要该名称,因此,不能使用匿名内部类构造。

最新更新