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); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |