2013-07-17 2 views
3

Поэтому у меня есть интерфейс:Интерфейс для изменяемого списка

public interface 
{ 
    List<String> getList(); 
} 

Однако, я считаю, что реализатор может вернуть неизменяемый список как:

List<String> getList() 
{ 
    return Collections.unmodifiablelist(new ArrayList<String>()); 
} 

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

+0

Попробуйте изменить это и создать копию, если она выбрасывает UnsupportedOperationException? Или вы можете просто потребовать 'getList()' возвращает 'ArrayList '. – kennytm

+1

Нет, вы можете _never_ остановить класс, который реализует ваш интерфейс, отбрасывая «RuntimeException», что и будет делать этот список. –

+0

Документируйте существующий интерфейс, указав, что ожидается модифицируемый список. Исключение в противном случае .. – predi

ответ

0

Вы не можете заверить, что тип возврата - Collection. Что вы можете сделать, это правильный документ.

Что касается дизайна API, вы должны просто сделать свой javadoc понятным! Люди, которые используют метод, не читая своего документа, заслуживают удивления.

Is it acceptable to return unmodifiableList or should I return array?

0

Я думаю, что вы ищете, не интерфейс, но especific реализации, так как интерфейс определяет «как вещь supose быть» не «как обстоят дела». В других мирах, вы пытаетесь установить especific в себя вести, так, лучший способ здесь, чтобы заставить исполнителей использовать especific версию List, как это:

public interface MyInterface { 
    MyModifiableList getList();  

} 

И затем вы создаете свою версию модифицируемого класса, который будет использоваться вашими исполнителями. Например:

public final class MyModifiableList { 
    // Implementation... 
}