通用问题 - 推断类型不符合声明的绑定

时间:2014-06-15 14:29:08

标签: 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&lt;份&lt; E - 代替;&GT; (在“Car”类中),但编译器说没有:[因为如果我们试图在工具城中保存一个轮胎,他就无法在工具的范围内找到StoneTire类型。

1 个答案:

答案 0 :(得分:2)

你的方法

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

有自己的类型参数M,但它也取决于类类型参数EM绑定在方法调用上,但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>的子类型,因此不能用作期望后者的参数。