9

来自Angelika Langer 的通用常见问题解答

删除类型参数。

当编译器找到泛型类型或方法的定义时,它会删除所有出现的类型参数并将它们替换为最左边的边界,如果没有指定边界,则使用 Object 类型。

编辑:据我所知,在这种情况下,最左边的界限是字面意思,即界限列表中最左边的意思。我想了解为什么选择此政策?

4

2 回答 2

10

在这种情况下,“最左边”不是技术术语。它的字面意思是“最左边”。它只是意味着当类型参数有几个边界(限制)时:

T extends Callable<Long> & Runnable

编译器将所有出现的类型参数替换T为最左边的边界(在本例中为Callable<Long>):

这意味着,就像在 Angelika 的例子中一样,这个:

private T task1, task2; 

替换为:

private Callable task1, task2; 
于 2013-03-08T14:31:28.807 回答
2

没有理由。他们只需要选择一个。整件事糟透了。这就像问你想拯救哪一个孩子一样。你想拯救所有人,呵呵。但他们不让你。

于 2013-03-08T16:42:22.557 回答