美文网首页alreadyjava
说说 Java 内部类的基本用法

说说 Java 内部类的基本用法

作者: deniro | 来源:发表于2022-03-20 18:23 被阅读0次

    先从一个示例说起。该示例实现了迭代器模式的数组,可添加、可遍历数组内部的元素。而且还可以判断是否已到了数组末尾。

    在这里插入图片描述

    首先定义了一个接口,本质上是一个迭代器:

    //迭代器接口
    public interface Selector {
        //判断是否到了数组末尾
        boolean end();
        
        //获取当前索引所在元素
        Object current();
        
        //进入下一元素
        void next();
    }
    

    接下来是主类:

    // 数组序列
    public class Sequence {
        
        // Object 数组
        private Object[] items;
        
        //初始索引
        private int next = 0;
        
        //初始化序列,设定序列长度
        public Sequence(int size) {
            items = new Object[size];
        }
        
        //新增元素
        public void add(Object x) {
            if (next < items.length) {
                items[next++] = x;
            }
        }
        
        //实现了 Selector 接口的内部类
        private class SequenceSelector implements Selector {
            //初始索引
            private int i = 0;
            //是否已到数组末尾
            public boolean end() {
                return i == items.length;
            }
            //获取当前索引所在元素
            public Object current() {
                return items[i];
            }
            //索引加 1
            public void next() {
                if (i < items.length)
                    i++;
            }
    
    
        }
        // 初始化 Selector 内部类实例
        public Selector selector() {
            return new SequenceSelector();
        }
    
        public static void main(String[] args) {
            //初始化一个具有 10 个元素的序列
            Sequence sequence = new Sequence(10);
            for (int i = 0; i < 10; i++) {
                sequence.add(Integer.toString(i));
            }
            
            //迭代输出
            Selector selector = sequence.selector();
            while (!selector.end()) {
                System.out.print(selector.current() + " ");
                selector.next();
            }
        }
    }
    

    有以下几点需要注意:

    1. 在主类中定义了返回内部类实例的方法(比如示例中的 Sequence#selector 方法),以供外部调用。这个内部类是私有的,所以可以通过这种方式被外部访问到。

    2. 内部类可以直接访问在主类中定义的属性或者方法,包括 private 标注的情况(比如示例中的 items 私有属性)。


    参考:
    BruceEckel, 埃克尔, 陈昊鹏. Java编程思想[J]. 机械工业出版社, 2007.p.190-193

    相关文章

      网友评论

        本文标题:说说 Java 内部类的基本用法

        本文链接:https://www.haomeiwen.com/subject/rqradrtx.html