你能创建一个只能应用于某些类和子类的接口吗?
如果我的界面仅添加到 JComponent的不同子类中,我需要引用JComponent和我的界面的方法......我该怎么做这个?在我的头脑中,我可以通过从JComponent添加到我的界面的方法来实现这一目标。
这看起来很笨拙。有什么更好的方法呢?
答案 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)
你为什么要这样做?
接口本质上不应该受到这种限制,必须这样做,对我来说,这表明你的设计至少在某种程度上是复杂的或更糟糕的。
我认为,只要界面明确命名并捕获一个概念,它就可以实现其目的。