仅在两个类之间私自共享变量-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时,您不能。这就是将事物私有化的全部意义。