【问题标题】:How do you implement inference with extensions <java>你如何使用扩展实现推理 <java>
【发布时间】:2017-04-28 07:23:13
【问题描述】:

我试图弄清楚如何进行简单的实现,我想,如果接口扩展到另一个接口怎么办? 例如,

public interface A{
    public void a();
}

public interface B{
    public void b();
}

public interface C extends B, A {
    public void c();
}

如果我要在另一个类上实现接口 C,我需要做什么? 我通过阅读其他线程尝试了这个:

public class Example<E extends B&A> implements C{
    public void c(){
    }
}

这似乎不对。

【问题讨论】:

  • “扩展推理”?这是什么意思?

标签: java extends inference


【解决方案1】:

……简单地实现所有接口有什么问题?

public class Example implements C {
  @Override 
  public void a(){ }
  @Override 
  public void b(){ }
  @Override 
  public void c(){ }
}

换句话说:您认为首先将 Example 设为泛型类型可以获得什么?!

含义:如果我没有看到更深层次的问题 - 你应该考虑更新你的问题并解释你打算做什么(避免在这里解决xy problem)。如果没有更深层次的问题,请使用最简单的解决方案(如上图所示)。

【讨论】:

    【解决方案2】:

    如果你想让你的Example 类实现C...你需要做的就是说implements C。类型变量是完全独立的,与此无关:

    public class Example implements C { ... }
    

    但是看看你的类签名:

    public class Example<E extends B&A> implements C
    

    E 是一个类型变量,它允许您处理对实现BA(但不是C)的类的引用。

    例如,如果Example中有一个方法以E为参数:

    void someMethod(E e)
    

    那么你可以在它的正文中包含以下内容:

    void someMethod(E e) {
      e.a();  // OK.
      e.b();  // OK.
      // e.c();  // Compiler error, E doesn't implement C.
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多