Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我可以在java中的静态嵌套类之间限制对私有字段的访问吗?_Java - Fatal编程技术网

我可以在java中的静态嵌套类之间限制对私有字段的访问吗?

我可以在java中的静态嵌套类之间限制对私有字段的访问吗?,java,Java,如果我有一个包含两个静态嵌套类的类,有没有办法限制一个类中的私有静态字段从另一个类访问?例如: public class Outer { private static class Inner1 { private static int privateInner1 = 0; private Inner1() { System.out.println(privateInner1 + ", " + Inner2.privateInner2); // print

如果我有一个包含两个
静态
嵌套类的类,有没有办法限制一个类中的
私有静态
字段从另一个类访问?例如:

public class Outer {

  private static class Inner1 {

    private static int privateInner1 = 0;

    private Inner1() {
        System.out.println(privateInner1 + ", " + Inner2.privateInner2); // prints "0, 1"
    }
  }

  private static class Inner2 {
    private static int privateInner2 = 1;
  }

  public static void main(String[] args) {
    new Inner1();
  }
}
并不是说我脑子里真的有这个用例,我只是个古玩


谢谢

不可能,您可以提供的最少访问权限是
private
(您已经提供了),并且由于您尝试在同一个类中访问它们,因此您无法阻止它们访问,毕竟它们是属于同一个家族的成员

你不能。当外部类的某些功能在另一个类中提取时更清晰,但它仍然与外部类紧密耦合时,可以使用内部类。因此,基本上,您应该在外部类中使用内部类来实现更好的代码分离

来自

私有类成员或构造函数只能在 顶级类的主体(§7.6),包含以下声明: 成员或构造函数

您不能限制从外部类访问内部类,因为外部类可以访问内部类的成员(无论是公共的还是私有的)。在这个场景中,主方法是
Outer
的一部分,因此它将能够访问
Inner1
Inner2
的成员。最接近目标的方法是在外部类中创建接口实例,并在其中定义成员变量。外部类将无法访问这些成员变量。举个例子

private interface Example{
    void doSomething();
}
private Example Inner3 = new Example(){
    private int privateInner3 = 2;
    public void doSomething(){
        System.out.println(privateInner3);
    }
}

现在在您的main方法中,您将无法访问
Inner3.privateInner3
,但您可以调用
Inner3.doSomething()

请访问此答案以获得更清晰的信息@Munish我没有问私有静态变量的用途是什么