-1

我在一个方法中声明了一个本地类,其字段被声明为私有。但是,我仍然可以直接从封闭方法的主体中访问它们——这是为什么呢?

作为旁注,我已将匿名类中的所有字段声明为私有,但这样做实际上有什么好处吗?有什么东西可以访问它们吗?

编辑:代码示例

public void myMethod() {

    class myException extends SomeOtherException{
        private boolean Bool;

        public Boolean getBool() { return this.Bool; }

        public myException() { //constructor stuff }
    }

    try {
        Thing.setHandler(new HandlingClass() {
            private String myString; //What is the point in making these private?

            ... other methods in anonymous class ...
        }
    ... more code ...
    } catch (myException e) {
        ... e.Bool  //Can be accessed. Why?
    }
}
4

1 回答 1

0

之所以访问它,是因为它的访问方式与嵌套类类似。根据您的方法,本地类属性是可见的,如果它是嵌套类,它将是相同的。

这是本地类的 java 文档中的一个片段:

访问封闭类的成员

本地类可以访问其封闭类的成员。

此外,局部类可以访问局部变量。但是,局部类只能访问声明为 final 的局部变量。当局部类访问封闭块的局部变量或参数时,它会捕获该变量或参数。例如,PhoneNumber 构造函数可以访问局部变量 numberLength,因为它被声明为 final;numberLength 是一个捕获的变量。

但是,从 Java SE 8 开始,本地类可以访问封闭块的局部变量和参数,它们是最终的或有效的最终的。一个变量或参数,其值在初始化后永远不会改变,它实际上是最终的。

https://docs.oracle.com/javase/tutorial/java/javaOO/localclasses.html

于 2016-07-18T11:07:30.670 回答