Может ли кто-нибудь сказать мне цель внутренних классов и, если паттерны итератора должны или хорошая идея использовать внутренние классы? - PullRequest
4 голосов
/ 05 апреля 2010

Может ли кто-нибудь сказать мне, какова цель внутренних классов? Кроме того, при разработке шаблона итератора мы должны использовать внутренние классы? Было бы лучше использовать внутренние классы?

Ответы [ 3 ]

4 голосов
/ 05 апреля 2010

В Википедии есть хорошая статья о внутреннем классе .

Вам не нужно использовать внутренние классы для шаблона итератора :

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 голосов
/ 05 апреля 2010

Внутренний класс - это класс, который не может выжить без класса, в котором он определен. Другими словами, если класс не может выжить без «родительского» класса, то лучше быть внутренним классом Это. Некоторые (если не большинство) итераторы определяются как внутренние классы, потому что они связаны с текущим экземпляром родительского класса и должны иметь прямой доступ к нему. Так, например, нужна реализация ListIterator (которая объявлена ​​как внутренний класс), возвращаемая прямым доступом List#iterator() к методу get() текущего экземпляра List.

2 голосов
/ 05 апреля 2010

Если вам нужно реализовать интерфейс как часть вашей бизнес-логики, но вы не хотите, чтобы он был общедоступным как часть ваших классов, внутренние классы контракта позволяют вам это делать.

В целом, поскольку Java нуждается в объектах для всего, что они довольно часто полезны для таких вещей, как слушатели в программировании пользовательского интерфейса, где вам нужно прослушивать несколько кнопок или других входов, вы можете добавить анонимный внутренний класс к каждому из входы вместо того, чтобы помещать большую часть if затем между единственной реализацией слушателя для кнопок или чего-либо еще.

И нет, вам не нужно их ни для чего использовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...