Will_Beethoven 2015-06-02 07:21 采纳率: 57.1%
浏览 1576

Thinking in java 中遇到的关于内部类的小问题

// Sequence.java

interface Selector{
boolean end();
Object current();
void next();
}

public class Sequence{
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;
}
private class SequenceSelector implements Selector{
private int i = 0;
public boolean end(){ return i == items.length ;}
public Object current(){ return items[i]; }
public void next(){ if(i < items.length) i++; }
}
public Selector selector(){
return new SequenceSelector();
}
public static void main(String[] args){
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.println(selector.current()+" ");
selector.next();
}
}
}

// 书上的原话:
举个例子,如果Sequence.java不适用内部类,就必须声明“Sequence是一个Selector”,对于某个特定的Sequence只能有一个Selector。然而使用内部类很容易能够拥有另一个方法reverseSelector(),用它来生成一个反向遍历的Selector。只有内部类才有这种灵活性。

// 问题:
实现Sequence.java中的reverseSelector()方法

  • 写回答

1条回答 默认 最新

  • llx1943llx 2015-06-04 01:55
    关注

    Sequence类中新加一个内部类:

    private class ReverseSequenceSelector implements Selector{
        private int i = items.length;
        public boolean end(){ return i == 0 ;}
        public Object current(){ return items[i]; }
        public void next(){ if(i > 0) i--; }
    }
    

    然后再加一个方法reverseSelector():

    public Selector reverseSelector(){
        return new ReverseSequenceSelector();
    }
    
    评论

报告相同问题?

悬赏问题

  • ¥15 安装svn网络有问题怎么办
  • ¥15 Python爬取指定微博话题下的内容,保存为txt
  • ¥15 vue2登录调用后端接口如何实现
  • ¥65 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥15 latex怎么处理论文引理引用参考文献