2015-03-03 19 views
1

我有这两种方法的接口。java错误两种方法都有相同的删除仿制药

E2EResult sendRoutingRequests(List<RoutingRequest> routingRequestsList); 

E2EResult sendRoutingRequests(List<String> routingRequestsList); 

编译器呼喊为:

java error both methods have same erasure

我看到一些帖子谈了Java泛型约same erasure

有人可以解释这是为什么吗?

它不同于这个post,因为我不处理通配符。

+0

供参考:这与其他职位没有什么不同。 – laune 2015-03-03 11:25:04

+0

这与链接的帖子没有什么不同。这是同样的问题(类型擦除后相同的签名),尽管通配符。 – 2015-03-03 11:25:37

+0

这不是问题,但两种方法背后的语义是什么?如果“列表”是一种_raw_路由请求,则可以明确地命名该方法,例如, 'sendRawRoutingRequests(...)' – 2015-03-03 13:22:47

回答

2

编译器删除泛型类型参数,所以List<String>List<RoutingRequest>成为List,因此两个方法都具有相同的签名。

+0

但它不编译到不同的类文件? 'List '和'List ' – 2015-03-03 11:24:51

+2

@Elad Benda不,它不。你可以很容易地找到:'列表 l = ...;列表 l2 = ...; System.out.println(l.getClass()。equals(l2.getClass()));' – 2015-03-03 11:26:04

+0

在编译之前删除泛型类型,因此编译器看不到泛型类型。它只看到List。 – 2015-03-03 11:26:38