Использование неизменяемой коллекции guava в качестве параметра метода и/или типа возвращаемого значения

Я пытаюсь определить, как лучше всего использовать 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);
}

Мои вопросы:

  1. Что имеет смысл использовать в приложении? [doSomethingOne и getFooOne] или [doSomethingTwo и fooTwo]? Другими словами, если вы знаете, что используете ImmutableCollections имеет ли смысл продолжать выполнять кастинг вперед и назад и выполнять copyOf() или просто везде использовать Immutable?

  2. Эти примеры являются общедоступными методами, которые могут подразумевать, что их используют другие люди. Изменился бы какой-либо из этих ответов, если бы методы были частные и используемые внутри?

  3. Если пользователь попытается добавить что-либо в неизменяемый список, будет выдано исключение. Поскольку они могут не знать об этом, не будет ли более разумным явно возвращать ImmutableCollection вместо Collection ?

15
задан gvlasov 24 May 2015 в 13:09
поделиться