Uso de la colección inmutable de guayaba como parámetro de método y / o tipo de retorno
Estoy tratando de determinar cuáles serían las mejores prácticas para una ImmutableList. A continuación se muestra un ejemplo simplista que ayudará a generar mis preguntas:
Ex
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);
}
Mis preguntas
¿Qué tiene más sentido usar en una aplicación? [doSomethingOne y getFooOne] o [doSomethingTwo and fooTwo]? En otras palabras, si sabe que está utilizando ImmutableCollections, ¿tiene sentido seguir emitiendo de un lado a otro y haciendo copyOf (), o simplemente usar Immutable en todas partes?
Estos ejemplos son métodos públicos que podrían implicar que otras personas los usan. ¿Cambiaría alguna de estas respuestas si los métodos fueran privados y se usaran internamente?
Si un usuario intenta agregar algo a una Lista inmutable, se generará una excepción. Debido a que pueden no ser conscientes de esto, ¿no tendría más sentido devolver explícitamente una ImmutableCollection en lugar de una Collection?