我可以获得实现接口的类的实例吗?

时间:2013-09-14 16:53:25

标签: java interface

我有这个功能:

/***
 * Changes the windows panel and allows a state change
 * you can also change the minimum window size
 * */
public void changePanel(CBPanel panel){
    mainFrame.setContentPane();
    mainFrame.setMinimumSize(panel.getMinSize());
    mainFrame.setResizable(panel.canResize());
}

CBPanel作为唯一参数,CBPanel是通常将在JCOmponent上实现的接口。有什么方法可以从接口类中获取JComponent的实例吗?

我称之为

changePanel(new LoginPanel());

从逻辑上讲,我应该能够获得LoginPanel的实例,对吧?我想知道它是否使用某种类型的类型声明?

2 个答案:

答案 0 :(得分:1)

假设你有

public class LoginPanel extends JComponent implements CBPanel {
    // ....
}

你可以做到

public void changePanel(CBPanel panel){
    JComponent jComponent = null;
    if(panel instanceof JComponent) {
        jComponent = (JComponent) panel;
    }
    // if you want LoginPanel then you can cast it to it if it is a subtype of it
    LoginPanel loginPanel = null;
    if(panel instanceof LoginPanel ) {
        loginPanel = (LoginPanel) panel;
    }
    mainFrame.setContentPane();
    mainFrame.setMinimumSize(panel.getMinSize());
    mainFrame.setResizable(panel.canResize());
}

但是如果您传递的CBPanel既不是JComponent也不是LoginPanel,那么你必须弄明白该做什么。

答案 1 :(得分:0)

如果您的方法具有参数类型作为名为CBPanel的接口的引用,则此方法可以接受实现此接口的任何类的对象。因此,如果JComponent实施CBPanel,那么您的方法changePanel将接受它。