2014-02-19 2 views
2

Имея этот классМножественные итераторы для класса с использованием Iterable

public class MyClass { 

    private List<Integer> list1 = new ArrayList<Integer>(); 
    private List<String> list2 = new ArrayList<String>(); 

    . . . 
} 

Можно ли реализовать Iterable в классе таким образом, что этот код будет работать ?:

MyClass a = new MyClass(); 

for(Integer i: a) { 
    <do something with i> 
} 

for(String s: a) { 
    <do something with s> 
} 

Позвольте мне пояснить, что Я знаю, как итерации другими способами, даже я знаю, что я могу создать итератор для каждого типа списка, я хочу знать, возможна ли эта конкретная форма итерации.

+0

Это не представляется возможным. Вы должны выбрать либо Integer, либо String. –

+0

@kocko Я вижу, кто-нибудь из вас разместит ответ, чтобы я мог отметить ответ на этот вопрос? – ilomambo

+0

@ilomambo, я отправил ответ. –

ответ

2

Для того, чтобы получить его работу, вы можете реализовать интерфейс java.lang.Iterable и переопределить метод Iterable#iterator() в ClassA, но только один из контуров будет компиляции, потому что итерации будут применены только над одной из списки.

Лучше предоставить аксессоры для списков, а затем сделать:

for(Integer i: a.getIntList()) { 
    <do something with i> 
} 

for(String s: a.getStringList()) { 
    <do something with s> 
} 
1

Вы не можете предоставить общий тип со списком связанных типов, поэтому вам нужно принять решение для String или Integer - или вы дадите MyClass разоблачить две коллекции с помощью методов.

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