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不存在的方法,不要觉得他们错了,先看仔细源码的上下文,是不是从属于一个私有类当中,好好跟一下觉得有问题的代码的上文代码。

  • 相关阅读:
    oracle ODM 数据挖掘笔记
    oracle 函数3
    清除Oralcle的session的理由和方法
    ORACLE 多表关联 UPDATE 语句
    PL/SQL中游标和游标变量的使用(转)
    Oracle select in/exists/not in/not exits
    实战 BIRT 系列,第 1 部分
    freebsd中查看文件夹/目录大小的方法/命令
    大数据量导出Excel的方案
    我的万能dao设计类图
  • 原文地址:https://www.cnblogs.com/taobean/p/12364276.html
Copyright © 2011-2022 走看看