java - 通用问题 - 推断类型不符合声明的界限

标签 java generics types type-parameter

我们得到了以下类签名:

汽车:

public class car<E extends Parts> [...]

零件:

public abstract class parts<E extends Stuff> [...]

public class Tire<T extends StoneTire> extends parts<T>[...]

东西:

public abstract class Stuff [...]

public class Painting extends Parts [...]

[...]

我们想将汽车保存在 Treeset < Parts< E>> 中(在“Car”类中),但编译器说不:[ 因为如果我们尝试在工具之城保存轮胎,他就不能在 Tool 的边界中找到 StoneTire 类型。

最佳答案

你的方法

public final <M extends Museum<E>> void addMuseum(final M museum)

有自己的类型参数M ,但它也取决于类类型参数 EM绑定(bind)在方法调用处,但是 E绑定(bind)在实例(或表达式)的声明处。

你已经

toolCity.addMuseum(m1);

哪里toolCity似乎是一个实例

public class ToolCity extends City<Tool>
                                 // E

所以被调用的方法,完全绑定(bind),是

public final void addMuseum(final Museum<Tool> museum) ...

但是你的m1 ,从异常消息来看,似乎是一个

Museum<StoneTool> m1 = ...

一个Museum<StoneTool>不是 Museum<Tool> 的子类型因此不能用作期望后者的参数。

关于java - 通用问题 - 推断类型不符合声明的界限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24230580/

相关文章:

java - OpenOffice,将文档写入 servlet 响应

java - 当我在使用停止变量后调用线程时,它不运行。有人可以指出代码中的错误吗?

haskell - Haskell 中 `==` 的类型应该是 `Eq a b => a -> b -> Bool`

node.js - 使用 Sequelize 关联时缺少属性错误

c# - 从实现的泛型转换为接口(interface)类型的泛型

c# - 类型 "Action<T1,T2,T3>"存在于 2 个 DLL 中,如何指定使用哪一个或避免使用一个?

java - 来自 JavaScript 的 JAVA Restful WebService URL 上的 POST

java - 将 OnClick 内容单独放在另一个类中

java - 无法将 Map<Long, String> 传递给带有参数 Map< 的构造函数?扩展对象,?扩展对象>。为什么?

c# - 使用通用代码从 C# 中的另一个对象构建对象