我有一个包含两个类的包。私有(private)变量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 - 从任何其他类可见
protected - 在扩展类的所有类中可见 所以如果在 A 类你有
class A {
protected String share;
}
它将在class B extends A
、class C extends B
等中可见......
那么就有可能创建另一个class D extends A
并且share
将在其中可见。除非class A
是最终的,但你不能需要class B extends A
包可见
package com.foo.myclasses;
class A {
String share;
}
这样share
将在包com.foo.myclasses
中的所有类中可见
因此,仍然有一种方法可以在同一个包中创建一个类,并且 share
将在其中可见。
您可以采取变通办法来实现这一目标。
在A类中创建私有(private)字符串共享
创建 protected 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
}
}
但它是关于在运行时访问共享值的。没有什么可以阻止代码中的访问(如上所述)。代码将编译,但在运行时抛出异常。
就是这样。
关于java - 仅在两个类之间私有(private)共享变量 - Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47575617/