Java泛型和类型推理
从 类型推断 为了说明这最后一点,在下面的示例中,使用 确定传递给pick方法的第二个参数为 字符串类型:Java泛型和类型推理,java,generics,Java,Generics,从 类型推断 为了说明这最后一点,在下面的示例中,使用 确定传递给pick方法的第二个参数为 字符串类型: static T pick(ta1,ta2){return a2;} Serializable s=pick(“d”,new ArrayList()); 最初我认为这个想法是可以使用任何参数来代替T,只要它以String结尾。示例ArrayList 但后来我发现以下内容也很好: Serializable s=pick(“d”,new ArrayList()) 似乎T被推断为可序列化的而不
static T pick(ta1,ta2){return a2;}
Serializable s=pick(“d”,new ArrayList());
最初我认为这个想法是可以使用任何参数来代替T
,只要它以String
结尾。示例ArrayList
但后来我发现以下内容也很好:Serializable s=pick(“d”,new ArrayList())代码>
似乎T
被推断为可序列化的而不是字符串
那么这句话的意思是什么呢
推断确定传递给pick的第二个参数
方法是字符串类型的
在这种情况下,这三种类型是可序列化
,字符串
,数组列表
Serializable
不扩展任何内容
String
实现了Serializable
和其他不相关的东西
ArrayList
实现了Serializable
和其他不相关的东西
因此,适用于所有3种类型的最具体类型是Serializable
如果将调用替换为Serializable s=pick(“d”,new Object())例如,它不再编译,因为最具体的类型是now Object,并且您不能将Object强制转换为Serializable。@assylias:应该推断出最一般的形式,对吗?1)你不是说ArrayList
实现了Serializable
?2)最具体或最通用的类型吗?1)是的,ArrayList实现了Serializable 2)适用于所有3种类型的最具体的类型。在您的例子中,这三种类型也都是对象,但Serializable比Object更具体,所以选择它代码>它也不编译。但这种情况不清楚原因。它说:无法从可序列化转换为字符串。它是如何由此推断出Serializable
。
static <T> T pick(T a1, T a2) { return a2; }
Serializable s = pick("d", new ArrayList<String>());