Hello. > >> [...] > >> > >> public interface ConvexHull<S extends Space> { > >> Vector<S>[] generate(Vector<S>[] points); > >> } > > > > I think that you should use "List" instead of arrays (even "Iterable" > > whenever possible); it will be plainly more flexible. Just a little > > thought... > > I have now several implementations of at least 2D algorithms with this > interface: > > Iterable<Vector2D> generate(Iterable<Vector2D> points) > > which works, but I find it quite cumbersome for the following reasons: > > * Iterable obviously does not provide a size() method which is quite > handy in the algorithms > > * the addAll() method of collections is not defined for Iterable, but > only for Collection
If the algorithm needs some API to perform decently, it's fair to require it. > > So I would better opt for an interface like: > > Iterable<Vector2D> generate(Collection<Vector2D> points) > > The output may be an Iterable as it is ordered, a Collection might give > a wrong impression to the user (a Collection is not sorted per se, > although the same is true for Iterable, hmm) I don't understand; should the output be sortable? > What do you think? Not mixing different types makes the API simpler; the prototype could be Collection<Vector2D> generate(Collection<Vector2D> points) or List<Vector2D> generate(List<Vector2D> points) [Also, usability is enhanced by arguments as abstract as possible, but the returned value's concreteness is only limited by the developer's willingness to not be tied to a specific data structure.] If the answer to the above question is yes, then the second prototype makes more sense. Regards, Gilles --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org For additional commands, e-mail: dev-h...@commons.apache.org