[
https://issues.apache.org/jira/browse/COLLECTIONS-243?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12538740
]
Brian Egge commented on COLLECTIONS-243:
----------------------------------------
The Transformer<I, O> interface makes since as a single item. I can create a
transformer to convert Strings to Integers. These have nothing in common, and
the Transformer<String, Integer> seems to make sense. Where this doesn't seem
to work so great is when you have a chain, or a collection of transformers.
If you want to go from Double to String to BigDecimal, you could do this with
two transformers. However, a class which contains a list of Transformer<I, O>,
expecting the output of one to feed into the input of the next will not work,
with anything but <Object, Object>.
So, WRT ChainedTransformer, I'd be happy to leave it ungenerified.
Another problem with Transformer I ran into is with classes like
TransformedBag. This class implements Bag, and you must specify if the Bag is
to add <I> or <O> types. Perhaps, it's best not to specify either. With the
TransformedBag, you want you getters to return the <O> type, but your adders to
use the <I> type. This breaks the Bag interface, if you try to specify a type
for the Bag. It probably simply shouldn't try to specify a type for a Bag. If
you have a Bag<String>, then you expect to add & remove Strings. With a
transformed Bag, you can add one type and get another type out - clearly
defeating what you are trying to achieve with type safe generics.
> Generic versions of Predicated, Syncronized and Unmodifiable classes
> --------------------------------------------------------------------
>
> Key: COLLECTIONS-243
> URL: https://issues.apache.org/jira/browse/COLLECTIONS-243
> Project: Commons Collections
> Issue Type: Improvement
> Components: Bag, Collection, List, Set
> Affects Versions: Generics
> Environment: OS X
> Reporter: Edwin Tellman
> Priority: Minor
> Fix For: Generics
>
> Attachments: collections_06_03_11.patch
>
>
> I added generics to some more classes and fixed some compilation problems.
> The generic version of Transformer required the input and output types to be
> identical. This seemed to me to reduce the usefulness of transformed
> collections, as transforming one type into another seems like it would be a
> fairly common operation. I'm not sure how to fix this, however, as it also
> doesn't seem feasible to have a generic TransformedCollection with different
> input and output types that implements Collection<E>. Anyway, this patch
> de-generifies TransformedCollection, which also fixes some compilation
> problems. Please disregard this change if you disagree and have a better
> solution.
> The modified collection classes are:
> Bags: PredicatedSortedBag, AbstractBagDecorator, SynchronizedBag,
> UnmodifiableSortedBag, SynchronizedSortedBag, PredicatedBag
> Lists: PredicatedList, SynchronizedList
> Sets: PredicatedSortedSet, SynchronizedSortedSet, PredicatedSet,
> UnmodifiableSortedSet, SynchronizedSet
> Miscellaneous: PredicatedBuffer
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.