为什么java在将字符串的arraylist对象传递给泛型方法时推断序列化

问题描述 投票:3回答:2
  1. static <T> T pick(T a1, T a2) { return a2; }
  2. Serializable s = pick("d", new ArrayList<String>());

如果我正在引用String或任何其他类型。编译器抛出错误。

你能帮我理解为什么java推断它为Serializable?

java
2个回答
8
投票
  • 作为a1的论据,你传递"d"类型的String
  • 作为论据a2,你传递new ArrayList<String>()类型的ArrayList<String>

最接近的String和ArrayList的常见超类型是Serializable。如果你写了它也会工作:

Object s = pick("d", new ArrayList<String>());

0
投票

在函数pick中,结果与参数a1和a2的类型相同。在第二行,Java编译器尝试推断参数a1和a2的公共类型T1。函数调用的结果将是T1类型。因此,a1具有类型String,而a2具有类型ArrayList。这两种类型都实现了Serializable接口。因此,T1将从Serializable继承,您可以在第二行开始时编写Serializable。你不能在那里写String,因为String不是String和ArrayList的常用超类型。

© www.soinside.com 2019 - 2024. All rights reserved.