Использование неизменяемой коллекции гуавы в качестве параметра метода и / или типа возвращаемого значения
Я пытаюсь определить, какие лучшие практики будут для ImmutableList. Ниже приведен упрощенный пример, который поможет ответить на мои вопросы:
Пример:
public ImmutableCollection<Foo> getFooOne(ImmutableList<Foo> fooInput){
//.. do some work
ImmutableList<Foo> fooOther = // something generated during the code
return fooOther;
}
public Collection<Foo> getFooTwo(List<Foo> fooInput){
//.. do some work
List<Foo> fooOther = // something generated during the code
return ImmutableList.copyOf(fooOther);
}
public void doSomethingOne(){
ImmutableCollection<Foo> myFoo = getFooOne(myList);
...
someOtherMethod(myFoo);
}
public void doSomethingTwo(){
Collection<Foo> myFoo = getFooOne(myList);
...
someOtherMethod(myFoo);
}
Мои вопросы:
Что имеет смысл использовать в приложении? [doSomethingOne и getFooOne] или [doSomethingTwo and fooTwo]? Другими словами, если вы знаете, что используете ImmutableCollections, имеет ли смысл продолжать приводить туда-сюда и делать copyOf (), или просто использовать Immutable везде?
Эти примеры являются публичными методами, которые могут подразумевать, что их используют другие люди. Изменится ли какой-либо из этих ответов, если методы будут частными и используются внутри страны?
Если пользователь попытается добавить что-либо в неизменяемый список, будет сгенерировано исключение. Поскольку они могут не знать об этом, не имеет ли больше смысла явно возвращать ImmutableCollection вместо Collection?