import com.foo.bar.ImmutableList; final ImmutableList.Builder<Object> intermediateCollection = ImmutableList.builder(); ... if (fromObjectClass.isInstance(object)) intermediateCollection.add(object); ... query (intermediateCollection.build())This is bad enough, but we'll let it slide.
It turns out that the query method wants to mutate the collection. (This is obnoxious. When I borrow something I try to leave it in the same condition as when I got it. I don't go mutating it and I expect my libraries to extend the same courtesy.) I guess I don't care all that much — I can simply make the collection mutable.
So why can't I just delete the `Immutable' prefix?
// Now it is named `Lists' with an `s' import com.foo.bar.Lists; // Now I have to specify the implementation technique. // Why isn't it a List.builder? final List<Object> intermediateCollection = Lists.newArrayList(); // Why isn't there build that is a no-op? query (intermediateCollection)This is simply wrong.
1 comment:
Well, fundamentally because List is the name of an interface, of which ImmutableList is a concrete realization: arguably ImmutableList should have been called ImmutableArrayList.
Post a Comment