仅适用于某些类的界面?

时间:2009-08-24 05:19:20

标签: java language-features language-design

你能创建一个只能应用于某些类和子类的接口吗?

如果我的界面添加到 JComponent的不同子类中,我需要引用JComponent和我的界面的方法......我该怎么做这个?在我的头脑中,我可以通过从JComponent添加到我的界面的方法来实现这一目标。

这看起来很笨拙。有什么更好的方法呢?

3 个答案:

答案 0 :(得分:7)

显而易见的解决方案是在接口上添加一个返回组件的方法(可能是this)。

JComponent getComponent();

甚至可以对您的界面进行通用化处理:

 public interface MyInterface<C extends JComponent> {
     C getComponent();
     [...]
 }

这不是很好的设计,但应该有效。

答案 1 :(得分:2)

可能会出现无法使用的情况,但使用泛型可以指定几种类型:

interface Foo { void frobulize(); }

class Bar {
    <T extends JComponent & Foo> String doFoo(T obj){
        obj.frobulize();
        return obj.getToolTipText();
    }
}

如果您希望将对象作为非参数化类型的字段,则将类型参数添加到构造函数中(这是一个鲜为人知的特性,必然会使您的同事感到困惑和压力):

class Quux {
    private final Foo foo;
    private final JComponent component;
    public <T extends JComponent & Foo> Quux(T fc){
        foo = fc;
        component = fc;
    }
}

答案 2 :(得分:-1)

你为什么要这样做?

接口本质上不应该受到这种限制,必须这样做,对我来说,这表明你的设计至少在某种程度上是复杂的或更糟糕的。

我认为,只要界面明确命名并捕获一个概念,它就可以实现其目的。