我们得到了以下类签名:
汽车:
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
,但它也取决于类类型参数 E
。 M
绑定(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/