限制访问Java包

时间:2013-01-11 16:18:21

标签: java design-patterns architecture package

我有GUI按钮触发的命令,例如:Start和Abort。单击按钮后,将在actionPerformed方法中执行这些命令。 GUI和命令在包A中。在包B中,我有一个从外部库调用方法的类。

包装B中的例子:

class Control {
    void start() {
      extLib.start();
    }

    void abort() {
      extLib.abort();
    }
  }

包A中的类无法访问包B中的类。如何在命令中从Control类执行方法?谢谢你的帮助。

4 个答案:

答案 0 :(得分:1)

class A中添加import yourpackage.*;,其中class B可用。

现在,您可以通过执行此操作来引用您的Control类。

Control c = new Control ();
c.start();

答案 1 :(得分:0)

您可以访问Control类中的包,但无法访问其方法start()abort(),因为访问不带修饰符的方法的条件是包级别。您必须定义公共方法,或者通过将另一个类定义为子类来保护。

答案 2 :(得分:0)

确保对包B中的类使用公共访问修饰符而不是默认修饰符!

答案 3 :(得分:0)

我的问题可能不清楚或不完整,对不起 这是我做的 在包B中:

package b.startup

public class Initialize {
  public Initialize() {
    CmdFactory.getInstance().setControlAdapter(new ControlAdapter());
  }
}


package b.control
public class ControlAdapter implements Control {
  public void start() { extLib.start() };
  public void abort() { extLib.abort() };
}


在包A中

package a.control
  public interface Control {
    void start();
    void abort();
  }


package a.cmd
    public class StartCmd extends Command {
      public void execute(/* Some parameters */) {
        CmdFactory.getInstance.getControlAdapter().start(/* Some parameters */);
      }
    }


package a.factory
public class CmdFactory {
  Control control;
  // Constructor for default control
  // Getter and Setter for control.
}


包A中的类不会从包B中的类调用方法。很简单,但我的解决方案使用Singleton,我想避免它以及静态方法。