【问题标题】:java error both methods have same erasure for genericsjava错误两种方法对泛型具有相同的擦除
【发布时间】:2015-03-03 11:20:35
【问题描述】:

我有这两种方法的接口。

E2EResult sendRoutingRequests(List<RoutingRequest> routingRequestsList);

E2EResult sendRoutingRequests(List<String> routingRequestsList);

编译器喊:

java error both methods have same erasure

我看到一些帖子谈论 same erasure 用于 java 泛型。

谁能解释这是为什么?

这与post 不同,因为我不处理通配符。

【问题讨论】:

  • 仅供参考:这与其他帖子没有什么不同。
  • 它与您链接的帖子没有什么不同。这是相同的问题(类型擦除后相同的签名)尽管通配符。
  • 这不是问题,但这两种方法背后的语义是什么?如果List&lt;String&gt; 是一种 raw 路由请求,您可以显式命名该方法,例如sendRawRoutingRequests(...)

标签: java generics compilation


【解决方案1】:

编译器去掉了泛型类型参数,所以List&lt;String&gt;List&lt;RoutingRequest&gt;变成了List,因此这两个方法具有相同的签名。

【讨论】:

  • 但它不会编译成不同的类文件吗? List&lt;RoutingRequest&gt;List&lt;String&gt;
  • @Elad Benda 不,它没有。您可以轻松找到:List&lt;String&gt; l = ...; List&lt;RoutingRequest&gt; l2 = ...; System.out.println(l.getClass().equals(l2.getClass()));
  • 泛型类型在编译之前被删除,因此编译器看不到泛型类型。它只看到列表。
  • @EladBenda 编译为List&lt;Object&gt;,RoutingRequest和String都是instanceof对象。
猜你喜欢
  • 1970-01-01
  • 2018-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多