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

时间:2017-11-30 14:18:17

标签: java

我有一个包含两个类的包。私有变量share位于class A中,该变量只能由这两个类AB访问,并且无法通过导入包来访问。是否有可能实现这一目标?

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

}

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

1 个答案:

答案 0 :(得分:1)

你不能直接实现它。 Java中有可见性级别:

公开 - 可从任何其他类看到

受保护 - 在所有扩展课程的班级中都可见   所以,如果在A级你有

class A {
  protected String share;
}

它会在class B extends Aclass 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
  }
}

但它是关于在运行时访问共享的价值。没有什么能阻止代码中的访问(如上所述)。代码将编译,但在运行时抛出异常。

它就是这样。