【发布时间】:2019-01-10 05:13:42
【问题描述】:
当我尝试编译以下代码时,编译失败并出现以下错误。我不确定为什么应该这样做,因为我只返回一个实现合同的类
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 会这样(或者)我错过了一些明显的东西
PS:在发布此查询之前,我已经阅读了超过 10 个 SO 的热门搜索
【问题讨论】:
-
您忘记了“以下错误”消息
-
@AshokKoyi 你的工厂知道它正在实例化 ConcreteClass,因为它所做的 new 是 new ConcreteClass()。这并没有改变它应该声明它正在返回的内容
-
@AshokKoyi 我不知道你在说什么。但是当你说你返回 T 时,你并不是说你返回 Contract。写不同的东西会产生不同的含义。
-
@AshokKoyi 这里是另一个相关主题 - 我认为这是您误解的核心:stackoverflow.com/q/4231305/2513200 - 在定义 Java 的泛型时做出的基本设计决策,特别是选择调用站点差异
标签: java generics static-methods