代码之家  ›  专栏  ›  技术社区  ›  jedierikb grijalvaromero

仅用于某些类的接口?

  •  5
  • jedierikb grijalvaromero  · 技术社区  · 16 年前

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

    如果我的界面是 只有 添加到 不同的 jcomponent的子类,我需要同时参考jcomponent的方法和我的接口…我该怎么做?我可以通过将JComponent中的方法添加到我的接口来完成这个任务。

    这看起来很笨拙。最好的方法是什么?

    3 回复  |  直到 16 年前
        1
  •  7
  •   Tom Hawtin - tackline    16 年前

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

    JComponent getComponent();
    

    或者甚至将您的接口进行通用化:

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

    这不是很好的设计,但它应该能工作。

        2
  •  2
  •   gustafc    10 年前

    可能存在这样的情况,但使用泛型可以指定几种类型:

    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;
        }
    }
    
        3
  •  -1
  •   Nick Holt    16 年前

    你为什么要这样做?

    界面的本质不应该以这种方式受到限制,必须这样做,对我来说,这意味着你的设计至少过于复杂或者在某种程度上存在更严重的缺陷。

    我认为只要接口有明确的名称并捕获到一个单一的概念,那么它就满足了它的目的。