2014-10-01 4 views
-2

Пожалуйста, помогите мне понять ниже:О Iterator и Iterable интерфейса конструкторов

Так как Iterable и Iterator интерфейсы так кодирование Iterator<T> it = new Iterator<T>(); получат error(interface has no constructor ?).

Но почему коды ниже работают нормально? new Iterable<String>() { --- } и его вложенность new Iterator<String>() являются конструкторами интерфейсов Iterable и Iterator, только они возвращают анонимные объекты против «it» реального объекта.

public class MultiIterableClass extends IterableClass { 
    public Iterable<String> reversed() { 
     return new Iterable<String>() { 
      public Iterator<String> iterator() { 
       return new Iterator<String>() { 
        int current = words.length -1; 

        public boolean hasNext() { return current > -1; } 
        public String next() { return words[current--]; } 
        public void remove() { // Not implemented 
         throw new UnsupportedOperationException(); 
        } 
       } 
      } 
     } 
    } 
} 

2-й вопрос заключается в том, что вышеуказанные коды (от мышления в Java 4-Ed) являются сложными с конструктором вложенностью другого конструктора, каково reversed() возвращения? Верните Iterable-object или верните Iterator-object или обоими? Если оба являются порядком возврата?

Благодаря

ZW

+0

Вы спрашиваете, в чем разница между 'new Iterator();' и 'new Iterator() {...};'? –

+3

Познакомьтесь с [анонимными классами] (http://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html) и [внутренними классами] (http://docs.oracle.com/javase/tutorial /java/javaOO/innerclasses.html). – jedwards

+0

Что касается # 2, 'reverseed()' возвращает (объект, который реализует) 'Iterable'. Интерфейс ['Iterable'] (http://docs.oracle.com/javase/7/docs/api/java/lang/Iterable.html) указывает, что объект имеет метод' iterator() ', который возвращает объект, который [реализует 'Iterator'] (http://docs.oracle.com/javase/7/docs/api/java/util/Iterator.html). – jedwards

ответ

0

Это понятие анонимных внутренних классов. , когда вы говорите новый Iterator() {---}, вы просто реализуете этот интерфейс.

Смежные вопросы