Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java泛型和类型推理_Java_Generics - Fatal编程技术网

Java泛型和类型推理

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被推断为可序列化的而不

类型推断

为了说明这最后一点,在下面的示例中,使用 确定传递给pick方法的第二个参数为 字符串类型:

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())@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>());