如何使用不同类型的列表重载方法?

Zep*_*hyr 0 java overloading type-erasure

是否可以重载参数为List<>不同类型的方法?

例如,我希望创建两个这样定义的方法:

public void getChanges(List<TypeOne>){}
public void getChanges(List<TypeTwo>){}
Run Code Online (Sandbox Code Playgroud)

但是,由于两种方法都接受 a List,因此存在冲突。有什么方法可以使方法考虑列表中的对象类型吗?

对我来说,编译器没有意识到签名确实不同,因为 aList<TypeOne>与 不同,这似乎很奇怪List<TypeTwo>

Vla*_*sev 5

你必须给它们不同的名字,因为上面的方法有相同的擦除

有关具体泛型类型的信息不会存储在运行时中,因此,如果您保留上述签名,那么如果您传递任何对象列表作为参数,JVM 将无法意识到在运行时应该调用什么方法。

有关擦除的更多信息,请参阅https://docs.oracle.com/javase/tutorial/java/generics/erasure.html