加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 泛型方法重写8

发布时间:2020-12-15 04:12:40 所属栏目:Java 来源:网络整理
导读:为什么无法说空(List?extends Number list)被void say(List Number list)覆盖. 尝试编译时发生名称冲突. 解决方法 您不能覆盖声明为的方法 void say(List? extends Number list) // A 同 void say(ListNumber list) // B 仅仅因为类型不相同.例如,List Inte
为什么无法说空(List<?extends Number> list)被void say(List< Number> list)覆盖.

尝试编译时发生名称冲突.

解决方法

您不能覆盖声明为的方法

void say(List<? extends Number> list)   // A

void say(List<Number> list)             // B

仅仅因为类型不相同.例如,List< Integer>匹配列表<? extends Number>但不是List< Number>,所以

List<Integer> integers = Arrays.<Integer>asList(1,2,3);
a.say(integers);  // is valid assuming signature A
b.say(integers);  // does not compile

(有关generics,wildcards,and type relationships的详细信息,请参阅此问题).如果编译器确实允许您覆盖您想要的方式,那么以下内容将是可能的:

class A {
    void say(List<? extends Number> numbers) { }
}

class B extends A {
    void say(List<Number> numbers) { numbers.add(Double.valueOf(1.0)); }
}


List<Integer> onlyIntsPlease = new ArrayList<Integer>();
B b = new B();

// Oops! The list of `Integer` will now contain a `Double`...
b.say(onlyIntsPlease);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读