2013-01-11 55 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.漂亮的簡單的類調用方法,但我的解決方案使用辛格爾頓和我想避免它,以及靜態方法。