Java内部类如何正确运用?
- 内容介绍
- 文章标签
- 相关推荐
本文共计777个文字,预计阅读时间需要4分钟。
首先,从一个示例说起。以下是一个实现了迭代器模式的简单Python类,该类可以添加、遍历数组内部的元素,并且可以判断是否到达了数组的末尾。
pythonclass ArrayIterator: 迭代器模式实现数组遍历
def __init__(self, array): self.array=array self.index=0
def __iter__(self): return self
def __next__(self): if self.index >=len(self.array): raise StopIteration result=self.array[self.index] self.index +=1 return result
def has_next(self): 判断是否到达数组末尾 return self.index 示例使用my_array=[1, 2, 3, 4, 5]iterator=ArrayIterator(my_array) 遍历数组for element in iterator: print(element) 判断是否到达末尾print(Has next:, iterator.has_next()) 在这个示例中,`ArrayIterator` 类定义了一个迭代器,它封装了一个数组,并提供了迭代和判断是否到达末尾的方法。通过重写 `__iter__` 和 `__next__` 方法,我们使得这个类符合迭代器协议。`has_next` 方法用于检查是否还有更多的元素可以迭代。 先从一个示例说起。该示例实现了迭代器模式的数组,可添加、可遍历数组内部的元素。而且还可以判断是否已到了数组末尾。 首先定义了一个接口,本质上是一个迭代器: 接下来是主类: 有以下几点需要注意: 在主类中定义了返回内部类实例的方法(比如示例中的 Sequence#selector 方法),以供外部调用。这个内部类是私有的,所以可以通过这种方式被外部访问到。 内部类可以直接访问在主类中定义的属性或者方法,包括 private 标注的情况(比如示例中的 items 私有属性)。 参考://迭代器接口
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();
}
}
}
BruceEckel, 埃克尔, 陈昊鹏. Java编程思想[J]. 机械工业出版社, 2007.p.190-193
本文共计777个文字,预计阅读时间需要4分钟。
首先,从一个示例说起。以下是一个实现了迭代器模式的简单Python类,该类可以添加、遍历数组内部的元素,并且可以判断是否到达了数组的末尾。
pythonclass ArrayIterator: 迭代器模式实现数组遍历
def __init__(self, array): self.array=array self.index=0
def __iter__(self): return self
def __next__(self): if self.index >=len(self.array): raise StopIteration result=self.array[self.index] self.index +=1 return result
def has_next(self): 判断是否到达数组末尾 return self.index 示例使用my_array=[1, 2, 3, 4, 5]iterator=ArrayIterator(my_array) 遍历数组for element in iterator: print(element) 判断是否到达末尾print(Has next:, iterator.has_next()) 在这个示例中,`ArrayIterator` 类定义了一个迭代器,它封装了一个数组,并提供了迭代和判断是否到达末尾的方法。通过重写 `__iter__` 和 `__next__` 方法,我们使得这个类符合迭代器协议。`has_next` 方法用于检查是否还有更多的元素可以迭代。 先从一个示例说起。该示例实现了迭代器模式的数组,可添加、可遍历数组内部的元素。而且还可以判断是否已到了数组末尾。 首先定义了一个接口,本质上是一个迭代器: 接下来是主类: 有以下几点需要注意: 在主类中定义了返回内部类实例的方法(比如示例中的 Sequence#selector 方法),以供外部调用。这个内部类是私有的,所以可以通过这种方式被外部访问到。 内部类可以直接访问在主类中定义的属性或者方法,包括 private 标注的情况(比如示例中的 items 私有属性)。 参考://迭代器接口
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();
}
}
}
BruceEckel, 埃克尔, 陈昊鹏. Java编程思想[J]. 机械工业出版社, 2007.p.190-193

