我们获得了以下课程签名:
车:
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&lt;份&lt; E - 代替;&GT; (在“Car”类中),但编译器说没有:[因为如果我们试图在工具城中保存一个轮胎,他就无法在工具的范围内找到StoneTire类型。
答案 0 :(得分:2)
你的方法
public final <M extends Museum<E>> void addMuseum(final M museum)
有自己的类型参数M
,但它也取决于类类型参数E
。 M
绑定在方法调用上,但E
绑定在实例(或表达式)的声明中。
你有
toolCity.addMuseum(m1);
其中toolCity
似乎是
public class ToolCity extends City<Tool>
// E
所以被完全绑定的方法是
public final void addMuseum(final Museum<Tool> museum) ...
但是,来自异常消息的m1
似乎是
Museum<StoneTool> m1 = ...
Museum<StoneTool>
不是Museum<Tool>
的子类型,因此不能用作期望后者的参数。