你可以创建一个只能应用于某些类和子类的接口吗?只有某些类的接口?
如果我的界面只加入到JComponent中的不同子类,我需要参考的JComponent的两种方法,我的界面......我应该怎么做呢?关闭我的头顶,我可以通过从我的界面添加JComponent的方法来实现这一点。
这看起来很笨拙。有什么更好的方法来做到这一点?
你可以创建一个只能应用于某些类和子类的接口吗?只有某些类的接口?
如果我的界面只加入到JComponent中的不同子类,我需要参考的JComponent的两种方法,我的界面......我应该怎么做呢?关闭我的头顶,我可以通过从我的界面添加JComponent的方法来实现这一点。
这看起来很笨拙。有什么更好的方法来做到这一点?
显而易见的解决方案是向您的界面添加一个方法,该方法返回组件(可能是this
)。
JComponent getComponent();
甚至genericise你的接口:
public interface MyInterface<C extends JComponent> {
C getComponent();
[...]
}
这不是伟大的设计,但它应该工作。
有可能是场景中这是行不通的,但是使用泛型,可以指定几种类型:如果您想要的对象
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;
}
}
你为什么要这么做?
接口的本质不应该以这种方式受到限制,而且必须这样做,对我来说,表明您的设计至少在某种程度上是过于复杂或更糟糕的缺陷。
我认为,只要界面被明确命名并捕捉到一个概念,那么它就符合其目的。
我承认_many_年后,但我可以想到有几个原因可能会有人想要这样做,并不认为我们应该暗示询问这个想法表明有缺陷的设计 – 2018-01-16 21:21:41
问题是你的接口和JComponent有相同的方法名,会有冲突吗? – Marius 2009-08-24 05:22:19