仅在两个类之间私自共享变量-Java

仅在两个类之间私自共享变量-Java,java,Java,我有一个包含两个类的包。私有变量share位于class A中,该变量只能通过A和B这两个类访问,不能通过导入包访问。有可能做到这一点吗 // A.java class A { private static String share; } // B.java class B { public String myMethode() { // do something with share } } 你不能直接实现它。 Java中存在以下可见性级别

我有一个包含两个类的包。私有变量
share
位于
class A
中,该变量只能通过
A
B
这两个类访问,不能通过导入包访问。有可能做到这一点吗

// A.java    
class A {
    private static String share;

}

// B.java
class B {
    public String myMethode() {
        // do something with share
    }
}

你不能直接实现它。 Java中存在以下可见性级别:

public-从任何其他类可见

受保护-在扩展类的所有类中可见 所以如果你在A班

class A {
  protected String share;
}
它将在
B类扩展A
C类扩展B
等中可见。。。 然后有可能创建另一个
D类扩展
,并且
共享
将在其中可见。除非
A类
是最终的,否则您不可能需要
B类扩展A类

包可见

package com.foo.myclasses;
class A {
  String share;
}
有了它,
share
将在包
com.foo.myclasses
因此仍然有一种方法可以在同一个包中创建一个类,
share
将在其中可见

你可以做一些变通来实现这一点

使
私有字符串在A类中共享

创建
受保护的getShare()
(或包可见)方法 像这样检查课堂

protected String getShare() {
  if (this.getClass().getName().equals("com.foo.myclasses.A") or this.getClass().getName().equals("com.foo.myclasses.B")) {
      return share;
  } else
  {
      throw new IllegalAccessException(this.getClass().getName() + " is not allowed to access share);
     // or return null
  }
}
但它是关于在运行时访问共享的价值。没有任何东西阻止代码中的访问(如上所述)。代码将编译,但在运行时引发异常


它就是这样。

如果你让
共享
受保护,并让
B类
扩展
A类
。让
共享
包私有,你就已经在那里了。把
A
B
放在同一个包中,没有其他类,让
共享
包私有(即没有可见性修改器)。您可以为需要B作为参数并在B中设置共享属性的共享编写getter。使用private时,您不能。这就是将事物私有化的全部意义。