Java 是否可以通过此关键字指向匿名类?
SSCCE:Java 是否可以通过此关键字指向匿名类?,java,this,anonymous-class,Java,This,Anonymous Class,SSCCE: public class Test { public Test() { new Anonymous1() { void validate() { new Anonymous2() { int calculate() { return Math.abs(Anonymous1.this.getValue()); // c
public class Test {
public Test() {
new Anonymous1() {
void validate() {
new Anonymous2() {
int calculate() {
return Math.abs(Anonymous1.this.getValue()); // compilation error - Anonymous1 is not an enclosing class
}
};
}
};
}
}
abstract class Anonymous1 {
abstract void validate();
int getValue() {
return 0;
}
}
abstract class Anonymous2 {
abstract int calculate();
}
我知道它看起来很复杂且无法使用,但我只是想知道是否可以使用
指针从Anonymous2
指向Anonymous1
类。这是指针,或者以任何其他方式。您需要在类中执行此操作
public Test() {
new Anonymous1() {
void validate() {
final Object this1 = this;
new Anonymous2() {
int calculate() {
return Math.abs(this1.getValue());
}
}
}
}
}
或者更好的是,先提取您需要的东西,然后有效地使用Java8中添加的final
public Test() {
new Anonymous1() {
void validate() {
int value = getValue();
new Anonymous2() {
int calculate() {
return Math.abs(value);
}
}
}
}
}
public Test() {
Anonymous1 a = () -> {
int v = getValue();
Anonymous2 = a2 = () -> Math.abs(v);
};
如果Anonymous1
和Anonymous2
是接口,您可以在Java8中使用lambdas
public Test() {
new Anonymous1() {
void validate() {
int value = getValue();
new Anonymous2() {
int calculate() {
return Math.abs(value);
}
}
}
}
}
public Test() {
Anonymous1 a = () -> {
int v = getValue();
Anonymous2 = a2 = () -> Math.abs(v);
};
}@SeniorJD没有完全固定的类定义…问题是,Anonymous1
和Anonymous2
不是这些内部类的名称Anonymous1
和Anonymous2
是这些内部类的超类。您需要使用类的实际名称进行操作。这是,但是没有名称,因为它们是匿名的。