为什么java在将string的arraylist对象传递给泛型方法时推断serializable static T pick(ta1,ta2){return a2;} Serializable s=pick(“d”,new ArrayList())

为什么java在将string的arraylist对象传递给泛型方法时推断serializable static T pick(ta1,ta2){return a2;} Serializable s=pick(“d”,new ArrayList()),java,Java,如果我引用字符串或任何其他类型。编译器正在抛出一个错误 你能帮我理解为什么java推断它是可序列化的吗? 作为参数a1,您正在传递类型为String的“d” 作为参数a2,您正在传递类型为ArrayList String和ArrayList最常见的超类型是Serializable。 如果你写下: Object s = pick("d", new ArrayList<String>()); objects s=pick(“d”,新的ArrayList()); 函数拾取结果中的类型与

如果我引用字符串或任何其他类型。编译器正在抛出一个错误

你能帮我理解为什么java推断它是可序列化的吗?

  • 作为参数
    a1
    ,您正在传递类型为
    String
    “d”
  • 作为参数
    a2
    ,您正在传递类型为
    ArrayList
String和ArrayList最常见的超类型是
Serializable
。 如果你写下:

Object s = pick("d", new ArrayList<String>());
objects s=pick(“d”,新的ArrayList());
函数拾取结果中的类型与参数a1和a2相同。 在第二行,Java编译器尝试为参数a1和a2推断公共类型T1。函数调用的结果将具有类型T1。 a1有String类型,a2有ArrayList类型。这两种类型都实现了接口可序列化。所以T1将从Serializable继承,您可以在第二行的开头编写Serializable。
您不能在那里写入字符串,因为字符串不是字符串和ArrayList的常见超类型。

谢谢您。这是否意味着String类在标准java包中实现了可序列化接口?java推断算法是这样工作的吗?因为类A和类B都实现了公共接口,比如C,那么对于上面的sceanrio,返回类型将是C?