java - 仅在两个类之间私有(private)共享变量 - Java

标签 java

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

// 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 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)字符串共享

创建 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/

相关文章:

java - File.createNewFIle() 抛出 PermissionDenied 尽管权限设置好

java - 错误:Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference

java - 为 RecyclerView 中的某些行禁用 ItemTouchHelper Swipe

Java String 类实例是常量

java - 相同的 appium 代码不适用于相同的应用程序

java - CORBA 命名服务上存储对象/引用的限制

java - Apache Httpd 和 Eclipse Tomcat 之间的连接(Windows 7)

java - 哪种删除 JTable 行方法更好?

java - HTTPS 请求到达服务器 android 两次

java - 线程中的异常 - Squirrel SQL 客户端