通用方法与非通用方法之间的区别

奥里·波波夫斯基(Ori Popowski)

这两种方法有什么区别?

public <T extends Serializable, Y extends List<T>> void foo(Y y, T t);

public void foo(Serializable ser, List<Serializable> list);
敏锐的
public <T extends Serializable, Y extends List<T>> void foo(Y y, T t);

此函数中的泛型强制您确切指定什么类型T,并且两个参数必须完全相同T不允许使用的子类,它必须是类型。否则编译器将不允许。

public void foo(Serializable ser, List<Serializable> list);

在此非泛型函数中,参数的类型之间没有关系,除了它们都是Serializable这可以ser是的任何类型Serializable,而其中的元素list可以是的任何类型Serializable它们可能是同一类型,但可能不是相同的类型。对编译器来说无关紧要。

对于可能正在阅读此内容的任何新手的更多信息:

泛型仅存在于源代码中。一旦编译代码,它们就不存在。这称为“类型擦除”:

https://www.google.com/search?q=type+erasure+java

完成此擦除操作后,预泛型代码可以与泛型代码互操作。所以之前存在引入泛型不会代码必须被改变。鼓励新代码始终使用泛型。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章