代码之家  ›  专栏  ›  技术社区  ›  Ashok Koyi

使用静态方法泛型时不兼容的类型

  •  0
  • Ashok Koyi  · 技术社区  · 7 年前

    当我试图编译以下代码时,编译失败,并出现以下错误。我不知道为什么会这样,因为我只返回一个实现契约的类

    public interface Contract {
      static <T extends Contract> T get() {
        return new ConcreteContract();
      }
    }
    
    class ConcreteContract implements Contract {
    }
    

    Contract.java:3: error: incompatible types: ConcreteContract cannot be converted to T
        return new ConcreteContract();
               ^
      where T is a type-variable:
        T extends Contract declared in method <T>get()
    1 error
    

    有人知道为什么Java会这样做吗?(或者)我是否漏掉了一些明显的东西?

    附:在发布这个查询之前,我已经阅读了10多个搜索结果。

    2 回复  |  直到 7 年前
        1
  •  7
  •   Eran    7 年前

    T Contract

    OtherConcreteContract variable = Contract.get();
    

    ConcreteContract OtherConcreteContract

    static Contract get() {
        return new ConcreteContract();
    }
    

    static ConcreteContract get() {
        return new ConcreteContract();
    }
    

        2
  •  0
  •   Shivang Agarwal    7 年前