Java 是否可以通过此关键字指向匿名类?

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

SSCCE:

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
是这些内部类的超类。您需要使用类的实际名称进行
操作。这是
,但是没有名称,因为它们是匿名的。