2013-01-11 56 views
1

我有GUI按钮触发的命令,例如:开始和中止。点击按钮后,这些命令在actionPerformed方法中执行。 GUI和命令在包A中。在包B中,我有一个从外部库调用方法的类。
限制访问Java包

实例包B:

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

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

类级封装用不上在包B.班我怎么能在我的命令执行从Control类的方法呢?谢谢你的帮助。

+0

导入packageB。*有什么问题? ? – BigMike

+1

我会假设这个方法是a)可以通过你应该使用的另一个类来访问,或者b)有一个很好的理由隐藏。 –

+1

@PeterLawrey是的,但类控制是公开的,它的方法是公开的,那么导入中的“真正”问题是什么? – BigMike

回答

1

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

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

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

您在控制类访问包,但没有获得它的方法start()abort(),作为标准访问方法,而改性剂是包级别。您必须定义公共方法,或者通过将其他类定义为子类来进行保护。

0

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

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() }; 
} 


级封装

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. 
} 


在包中的类不从包B.漂亮的简单的类调用方法,但我的解决方案使用辛格尔顿和我想避免它,以及静态方法。