我有一个包含两个类的包。私有变量share
位于class A
中,该变量只能由这两个类A
和B
访问,并且无法通过导入包来访问。是否有可能实现这一目标?
// A.java
class A {
private static String share;
}
// B.java
class B {
public String myMethode() {
// do something with share
}
}
答案 0 :(得分:1)
你不能直接实现它。 Java中有可见性级别:
公开 - 可从任何其他类看到
受保护 - 在所有扩展课程的班级中都可见 所以,如果在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 String share
创建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
}
}
但它是关于在运行时访问共享的价值。没有什么能阻止代码中的访问(如上所述)。代码将编译,但在运行时抛出异常。
它就是这样。