java的LinkedList类的poll方法为什么会编译报错呢?

daydayluck 2020-06-29 08:56:53

LinkedList的remove()方法和poll()方法为什么会编译报错呢?用法不对吗?哪里不对呀,求助大佬
...全文
1346 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
@Alexand_ER 2020-07-05
  • 打赏
  • 举报
回复
多态对于方法而言,编译看左边,运行看右边,list接口没有poll方法,当然编译报错喽
@Alexand_ER 2020-07-05
  • 打赏
  • 举报
回复
多态对于方法而言,编译看左边,运行看右边,list接口没有poll方法,当然编译报错喽
daydayluck 2020-06-30
  • 打赏
  • 举报
回复
引用 3 楼 小灰狼 的回复:
多态问题 因为你的 list 定义的是 List<Integer> 类型,编译器只认它是 List,而不是 LinkedList 原因么,很简单,因为 LinkedList 是运行时类型,也就是说运行时才能确定它是哪种类型。而运行过程中,可能发生很多事,虽然你把 LinkedList 赋值给 list,但编译器不会假设你会把其它 List 的子类型重新赋值给 list 这个变量。 比如 List<Integer> list = new LinkedList<Integer>(); ...... list = new ArrayList<Integer>(); // 重新赋值,list 不再是 LinkedList<Integer>类型 ...... list = getMyList(); // 重新赋值,谁也无法确定 getMyList 方法会返回哪个子类型,只有运行时才知道。 list.poll(); // 编译器只能确定它是 List,至于是 LinkedList 还是 ArrayList,或者哪个子类型,无法确定
谢谢🙏
daydayluck 2020-06-30
  • 打赏
  • 举报
回复
引用 4 楼 胖到没有朋友 的回复:
因为你接受linkedlist对象是用它的父对象list来接收的,java基础中有一个继承,讲了父类中有的方法子类中肯定会有,但是子类中有的方法父类中不一定会有,所有如果你想要调用poll方法,需要先将list对象转化成linkedlist。
谢谢🙏
小灰狼 2020-06-30
  • 打赏
  • 举报
回复
引用 3 楼 小灰狼 的回复:
多态问题 因为你的 list 定义的是 List<Integer> 类型,编译器只认它是 List,而不是 LinkedList 原因么,很简单,因为 LinkedList 是运行时类型,也就是说运行时才能确定它是哪种类型。而运行过程中,可能发生很多事,虽然你把 LinkedList 赋值给 list,但编译器不会假设你会把其它 List 的子类型重新赋值给 list 这个变量。 比如 List<Integer> list = new LinkedList<Integer>(); ...... list = new ArrayList<Integer>(); // 重新赋值,list 不再是 LinkedList<Integer>类型 ...... list = getMyList(); // 重新赋值,谁也无法确定 getMyList 方法会返回哪个子类型,只有运行时才知道。 list.poll(); // 编译器只能确定它是 List,至于是 LinkedList 还是 ArrayList,或者哪个子类型,无法确定
因为 LinkedList 是运行时类型 不好意思,这句话描述可能不准确,可能引起误解。 我的意思是说,List<Integer> list = new LinkedList<Integer>(), 这里 new LinkedList 是运行时才确定的类型。
胖到没有朋友 2020-06-30
  • 打赏
  • 举报
回复
因为你接受linkedlist对象是用它的父对象list来接收的,java基础中有一个继承,讲了父类中有的方法子类中肯定会有,但是子类中有的方法父类中不一定会有,所有如果你想要调用poll方法,需要先将list对象转化成linkedlist。
小灰狼 2020-06-30
  • 打赏
  • 举报
回复
多态问题 因为你的 list 定义的是 List<Integer> 类型,编译器只认它是 List,而不是 LinkedList 原因么,很简单,因为 LinkedList 是运行时类型,也就是说运行时才能确定它是哪种类型。而运行过程中,可能发生很多事,虽然你把 LinkedList 赋值给 list,但编译器不会假设你会把其它 List 的子类型重新赋值给 list 这个变量。 比如 List<Integer> list = new LinkedList<Integer>(); ...... list = new ArrayList<Integer>(); // 重新赋值,list 不再是 LinkedList<Integer>类型 ...... list = getMyList(); // 重新赋值,谁也无法确定 getMyList 方法会返回哪个子类型,只有运行时才知道。 list.poll(); // 编译器只能确定它是 List,至于是 LinkedList 还是 ArrayList,或者哪个子类型,无法确定
bioittang 2020-06-29
  • 打赏
  • 举报
回复
帮助文档和你用的JDK版本不一样。可能你用的是老版本JDK,新版本没这个方法了吧,不是都是有提醒的吗,list. r的时候就会让你选,没无参数的给你选肯定就不能用呀
daydayluck 2020-06-29
  • 打赏
  • 举报
回复
我查看api文档,用法我看着正确呀

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧