Я розширюю ArrayList, щоб створити користувальницький ArrayList, який можна змінити за допомогою звичайних методів ArrayList під час ітерації над ним. Для цього я також створюю Ітератор.
public class SynchronizedList<E> extends ArrayList<E>
{
// Fields here
//Constructors and methods here
public class SynchronizedListIterator<E> implements Iterator<E>
{
public int index;
private E current;
public boolean hasNext()
{
synchronized (/* reference to enclosing List object */) {
//code goes here
}
return false;
}
//more methods here
}
}
Під час моїх методів hasNext () та next () мені потрібно переконатися, що список не змінюється (його можна змінити будь-коли інший час). Отже, мені потрібно посилатися на мій тип укладеного в моєму синхронізованому () блоці.
Відповіді:
5 за відповідь № 1EnclosingType.this
. Так у вашому випадку було б SynchronizedList.this
.