2009-08-24 66 views
4

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

如果我的界面加入到JComponent中的不同子类,我需要参考的JComponent的两种方法,我的界面......我应该怎么做呢?关闭我的头顶,我可以通过从我的界面添加JComponent的方法来实现这一点。

这看起来很笨拙。有什么更好的方法来做到这一点?

+0

问题是你的接口和JComponent有相同的方法名,会有冲突吗? – Marius 2009-08-24 05:22:19

回答

6

显而易见的解决方案是向您的界面添加一个方法,该方法返回组件(可能是this)。

JComponent getComponent(); 

甚至genericise你的接口:

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

这不是伟大的设计,但它应该工作。

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; 
    } 
} 
-1

你为什么要这么做?

接口的本质不应该以这种方式受到限制,而且必须这样做,对我来说,表明您的设计至少在某种程度上是过于复杂或更糟糕的缺陷。

我认为,只要界面被明确命名并捕捉到一个概念,那么它就符合其目的。

+0

我承认_many_年后,但我可以想到有几个原因可能会有人想要这样做,并不认为我们应该暗示询问这个想法表明有缺陷的设计 – 2018-01-16 21:21:41