为了账号安全,请及时绑定邮箱和手机立即绑定

方法与类型中的另一个方法具有相同的擦除性。

方法与类型中的另一个方法具有相同的擦除性。

叮当猫咪 2019-06-27 16:50:09
方法与类型中的另一个方法具有相同的擦除性。为什么在同一个类中使用这两种方法是不合法的?class Test{    void add(Set<Integer> ii){}    void add(Set<String> ss){}}我得到了compilation error方法add(Set)与类型测试中的另一个方法具有相同的擦除Add(Set)。虽然我可以解决这个问题,但我想知道为什么javac不喜欢这样做。我可以看到,在许多情况下,这两种方法的逻辑非常相似,可以用一个public void add(Set<?> set){}方法,但情况并不总是如此。如果你想要两个的话,这太烦人了。constructors使用这些参数,因为您不能只更改其中一个参数的名称。constructors.
查看完整描述

3 回答

?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

Java泛型使用类型擦除。尖括号中的位(<Integer><String>)被删除,因此您将得到两个具有相同签名的方法(add(Set)你可以从错误中看到)。这是不允许的,因为运行时不知道在每种情况下使用哪一种。

如果Java得到了具体化的泛型,那么您可以这样做,但现在可能不太可能了。


查看完整回答
反对 回复 2019-06-27
?
森栏

TA贡献1810条经验 获得超5个赞

问题是Set<Integer>Set<String>实际上被视为Set来自JVM。为SET选择一个类型(在您的情况下是String或Integer)只是编译器使用的语法糖。JVM无法区分Set<String>Set<Integer>.


查看完整回答
反对 回复 2019-06-27
  • 3 回答
  • 0 关注
  • 918 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信