Java:将公共类方法暴露给同一项目的所有包,但为其他项目设置私有

Nah*_*ana 12 java oop design-patterns access-modifiers

我有一个包含两个软件包的库项目,分别是package1和package2,分别是class1和class2.class1有一些公共方法暴露给最终用户.我想在class1中添加一些只有class2才能访问的实用方法.我搜索了很多,但我找不到任何访问修饰符的方法只授予相同项目的不同包的访问权限.

有机会以任何方式实现它吗?

更新(代码示例):

package1中的Class1:

package com.example.package1;

public class Class1 {

    // This method should only be accessed by Class2, cannot made it public for
    // every class
    void performUtilityOperation() {
        // internal utility
    }

    // other public methods...
}
Run Code Online (Sandbox Code Playgroud)

package2中的class2:

package com.example.package2;

import com.example.package1.*;

public class Class2 {

    Class1 class1;

    public void setClass1(Class1 class1) {
        this.class1 = class1;
    }

    public void doSomeOperation() {
        this.class1.performUtilityOperation(); // here this method is not
                                                // accessible if not public
        // do some other operations
    }

    // other public methods
}
Run Code Online (Sandbox Code Playgroud)

Nit*_*yal 2

没有办法实现这一点(friend如果你来自 C++,那就没有办法实现)。尽管protected可以通过扩展类从不同的包访问成员,如下所示:

package1
public Class1{
    protected method();
}
Run Code Online (Sandbox Code Playgroud)

Class2 extends Class1因此,即使 Class2 位于不同的包method()中, 也是可见的。Class1

package2
public Class2 extends Class1{
    public otherMethod(){
        method(); // is visible here
    }
}
Run Code Online (Sandbox Code Playgroud)

Class3不延伸Class1,因此method()不可见

 package2
 public Class3{
      public otherMethod(){
          method(); // not visible here
      }
 }
Run Code Online (Sandbox Code Playgroud)

IMO 这是您可以在 Class1 中隐藏方法的最大程度