有人能告诉我内部类的目的是什么,以及是否应该使用内部类来实现迭代器模式?

4

请问内部类的作用是什么?在设计迭代器模式时,我们必须使用内部类吗?使用内部类是否更好?


1
这与作业有关吗?如果是,请添加作业标签。 - Kiril
为什么要写这样一个迭代器呢? - Thilo
不,这只是出于兴趣和学习的问题。 - Victor
3个回答

4

维基百科有一篇关于内部类的好文章

迭代器模式中,您不需要使用内部类:

import java.util.*; 
public class BitSetIterator implements Iterator<Boolean> { 
    private final BitSet bitset; 
    private int index;

    public BitSetIterator(BitSet bitset) { 
        this.bitset = bitset; 
    }

    public boolean hasNext() {   
        return index < bitset.length(); 
    } 

    public Boolean next() { 
        if (index >= bitset.length()) { 
            throw new NoSuchElementException(); 
        } 
        boolean b = bitset.get(index++); 
        return new Boolean(b); 
    } 

    public void remove() { 
        throw new UnsupportedOperationException(); 
    }
}

3
一个内部类是一个不能独立存在的类,它必须在定义它的类中存在。换句话说,如果一个类没有“父”类就无法存在,那么最好将它定义为其内部类。一些(如果不是大多数)迭代器被定义为内部类,因为它们与父类的当前实例耦合,并且需要直接访问它。例如,由List#iterator()返回的声明为内部类的ListIterator实现需要直接访问List当前实例的get()方法。

2
如果您需要在业务逻辑中实现一个接口,但不希望将其作为类的公共合同的一部分,则可以使用内部类来实现。总体而言,由于Java需要对象用于任何事情,因此它们经常用于诸如UI编程中的监听器等需要监听一系列按钮或其他输入的东西,您可以为每个输入添加一个匿名内部类,而不是必须在按钮或其他物品的单个监听器实现之间放置很多if-then-else语句。是的,您不必对它们做任何事情。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接