java错误这两种方法对泛型具有相同的擦除

java错误这两种方法对泛型具有相同的擦除,java,generics,compilation,Java,Generics,Compilation,我有一个与这两种方法的接口 E2EResult sendRoutingRequests(List<RoutingRequest> routingRequestsList); E2EResult sendRoutingRequests(List<String> routingRequestsList); E2EResult发送路由请求(列出路由请求列表); E2E结果发送路由请求(列表路由请求列表); 编译器会大喊: java错误两种方法具有相同的擦除 我看到一些帖子

我有一个与这两种方法的接口

E2EResult sendRoutingRequests(List<RoutingRequest> routingRequestsList);

E2EResult sendRoutingRequests(List<String> routingRequestsList);
E2EResult发送路由请求(列出路由请求列表);
E2E结果发送路由请求(列表路由请求列表);
编译器会大喊:

java错误两种方法具有相同的擦除

我看到一些帖子谈论java泛型的相同擦除

有人能解释为什么会这样吗


它与此不同,因为我不处理通配符。

编译器删除泛型类型参数,因此
List
List
成为List,因此这两个方法具有相同的签名。

但它不是编译到不同的类文件吗<代码>列表
列表
@Elad Benda不,没有。您可以很容易地找到:
listl=。。。;列表l2=。。。;System.out.println(l.getClass().equals(l2.getClass())泛型类型在编译之前被删除,因此编译器不会看到泛型类型。它只看到列表。@EladBenda它被编译为
List
,RoutingRequest和String是Object的实例。仅供参考:它与其他帖子没有区别。它与链接的帖子没有区别。同一个问题(类型删除后的相同签名)显示通配符。这不是问题,但这两种方法背后的语义是什么?如果
列表
是一种原始路由请求,则可以显式命名该方法,例如
sendRawRoutingRequests(…)