Я пытаюсь определить, как лучше всего использовать 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 и fooTwo]? Другими словами, если вы знаете, что используете ImmutableCollections имеет ли смысл продолжать выполнять кастинг вперед и назад и выполнять copyOf() или просто везде использовать Immutable?
Эти примеры являются общедоступными методами, которые могут подразумевать, что их используют другие люди. Изменился бы какой-либо из этих ответов, если бы методы были частные и используемые внутри?
Если пользователь попытается добавить что-либо в неизменяемый список, будет выдано исключение. Поскольку они могут не знать об этом, не будет ли более разумным явно возвращать ImmutableCollection вместо Collection ?