zoukankan      html  css  js  c++  java
  • 为什么有的java底层public方法在JDK文档中查不到?

    前言

    今天查看了ArrayList方法底层的remove方法,看到重载方法总共有两种:分别是:
    两种remove方法
    但是仔细想了一下感觉不对劲,大家看一下这个例子:

    public class Main {
        public static void main(String[] args) {
            ArrayList<String> list = new ArrayList<String>(Arrays.asList("a","b","c","d"));
            Iterator<String> iter = list.iterator();
            while(iter.hasNext()){
                String s = iter.next();
                if(s.equals("a")){
                    iter.remove();
                }
            }
            System.out.println(list.toString());
        }
    }
    

    很明显迭代器Iterator调用了remove方法,的确,Iterator接口中有remove方法的定义:
    在这里插入图片描述
    可是实现的确是ArrayList的remove方法,我查看了一下,确实有这个实现方法:那么为什么jdk查不到remove()空参数的这个方法呢???
    在这里插入图片描述

    wtf?明明是public的方法,怎么会查不到?
    很奇怪,难道是Oracle的程序员出了什么差错吗?

    我在谷歌查了半天也没查出个所以然,索性继续看源码:
    向前翻了一下这个remove方法:

    在这里插入图片描述
    原来这个方法是在一个内部类中啊。。而且这个内部类是私有类型的,我去。。原来是这样,其实上面那个例子程序执行了ArrayList的iterator方法,我们跟一下代码:
    在这里插入图片描述
    原来返回的是一个Itr类,这个类不就是ArrayList的那个私有类吗?这样就很好解释了。
    先得到了一个Itr类的对象,然后通过这个对象去调用私有类中的无参数方法remove。。soga!

    总结

    当大家遇到了底层源码有的方法而jdk不存在的方法,不要觉得他们错了,先看仔细源码的上下文,是不是从属于一个私有类当中,好好跟一下觉得有问题的代码的上文代码。

  • 相关阅读:
    【python接口自动化】httpUtils
    mac上安装chromedriver
    python自动化测试报告(excel篇)
    Fiddler 手机抓包介绍
    Fiddler 简单介绍
    Python splinter 环境搭建
    Python pip 常用命令
    Python Yaml 学习
    Jmeter
    Python3 操作Excel
  • 原文地址:https://www.cnblogs.com/taobean/p/12364276.html
Copyright © 2011-2022 走看看