删除类型参数。
当编译器找到泛型类型或方法的定义时,它会删除所有出现的类型参数并将它们替换为最左边的边界,如果没有指定边界,则使用 Object 类型。
编辑:据我所知,在这种情况下,最左边的界限是字面意思,即界限列表中最左边的意思。我想了解为什么选择此政策?
删除类型参数。
当编译器找到泛型类型或方法的定义时,它会删除所有出现的类型参数并将它们替换为最左边的边界,如果没有指定边界,则使用 Object 类型。
编辑:据我所知,在这种情况下,最左边的界限是字面意思,即界限列表中最左边的意思。我想了解为什么选择此政策?
在这种情况下,“最左边”不是技术术语。它的字面意思是“最左边”。它只是意味着当类型参数有几个边界(限制)时:
T extends Callable<Long> & Runnable
编译器将所有出现的类型参数替换T
为最左边的边界(在本例中为Callable<Long>
):
这意味着,就像在 Angelika 的例子中一样,这个:
private T task1, task2;
替换为:
private Callable task1, task2;
没有理由。他们只需要选择一个。整件事糟透了。这就像问你想拯救哪一个孩子一样。你想拯救所有人,呵呵。但他们不让你。