You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by mb...@apache.org on 2012/08/08 21:53:38 UTC
svn commit: r1370922 - in /commons/proper/functor/trunk/src:
main/java/org/apache/commons/functor/generator/
main/java/org/apache/commons/functor/generator/util/
test/java/org/apache/commons/functor/generator/
Author: mbenson
Date: Wed Aug 8 19:53:37 2012
New Revision: 1370922
URL: http://svn.apache.org/viewvc?rev=1370922&view=rev
Log:
make Generator.to(Collection) return strongly typed results matching parameter
Modified:
commons/proper/functor/trunk/src/main/java/org/apache/commons/functor/generator/BaseGenerator.java
commons/proper/functor/trunk/src/main/java/org/apache/commons/functor/generator/Generator.java
commons/proper/functor/trunk/src/main/java/org/apache/commons/functor/generator/util/CollectionTransformer.java
commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/generator/TestBaseGenerator.java
Modified: commons/proper/functor/trunk/src/main/java/org/apache/commons/functor/generator/BaseGenerator.java
URL: http://svn.apache.org/viewvc/commons/proper/functor/trunk/src/main/java/org/apache/commons/functor/generator/BaseGenerator.java?rev=1370922&r1=1370921&r2=1370922&view=diff
==============================================================================
--- commons/proper/functor/trunk/src/main/java/org/apache/commons/functor/generator/BaseGenerator.java (original)
+++ commons/proper/functor/trunk/src/main/java/org/apache/commons/functor/generator/BaseGenerator.java Wed Aug 8 19:53:37 2012
@@ -91,16 +91,15 @@ public abstract class BaseGenerator<E> i
* {@inheritDoc}
* Same as to(new CollectionTransformer(collection)).
*/
- public final Collection<? super E> to(Collection<? super E> collection) {
- return to(new CollectionTransformer<E>(collection));
+ public final <C extends Collection<? super E>> C to(C collection) {
+ return to(new CollectionTransformer<E, C>(collection));
}
/**
* {@inheritDoc}
* Same as to(new CollectionTransformer()).
*/
- @SuppressWarnings("unchecked")
public final Collection<E> toCollection() {
- return (Collection<E>) to(new CollectionTransformer<E>());
+ return to(CollectionTransformer.<E> toCollection());
}
}
Modified: commons/proper/functor/trunk/src/main/java/org/apache/commons/functor/generator/Generator.java
URL: http://svn.apache.org/viewvc/commons/proper/functor/trunk/src/main/java/org/apache/commons/functor/generator/Generator.java?rev=1370922&r1=1370921&r2=1370922&view=diff
==============================================================================
--- commons/proper/functor/trunk/src/main/java/org/apache/commons/functor/generator/Generator.java (original)
+++ commons/proper/functor/trunk/src/main/java/org/apache/commons/functor/generator/Generator.java Wed Aug 8 19:53:37 2012
@@ -58,7 +58,7 @@ public interface Generator<E> {
* @param collection Collection to which my elements should be added
* @return <code>collection</code>
*/
- Collection<? super E> to(Collection<? super E> collection);
+ <C extends Collection<? super E>> C to(C collection);
/**
* Same as to(new CollectionTransformer()).
Modified: commons/proper/functor/trunk/src/main/java/org/apache/commons/functor/generator/util/CollectionTransformer.java
URL: http://svn.apache.org/viewvc/commons/proper/functor/trunk/src/main/java/org/apache/commons/functor/generator/util/CollectionTransformer.java?rev=1370922&r1=1370921&r2=1370922&view=diff
==============================================================================
--- commons/proper/functor/trunk/src/main/java/org/apache/commons/functor/generator/util/CollectionTransformer.java (original)
+++ commons/proper/functor/trunk/src/main/java/org/apache/commons/functor/generator/util/CollectionTransformer.java Wed Aug 8 19:53:37 2012
@@ -20,6 +20,7 @@ import java.util.Collection;
import org.apache.commons.functor.UnaryFunction;
import org.apache.commons.functor.UnaryProcedure;
import org.apache.commons.functor.generator.Generator;
+import org.apache.commons.lang3.Validate;
/**
* Transforms a generator into a collection. If a collection is not passed into
@@ -29,7 +30,7 @@ import org.apache.commons.functor.genera
* @since 1.0
* @version $Revision$ $Date$
*/
-public class CollectionTransformer<E> implements UnaryFunction<Generator<? extends E>, Collection<? super E>> {
+public class CollectionTransformer<E, C extends Collection<? super E>> implements UnaryFunction<Generator<? extends E>, C> {
/*
* TODO revisit this class... it could stand a more-descriptive name. Also, it's a little
* hard to say whether, for an instance constructed without a specific target collection,
@@ -43,29 +44,16 @@ public class CollectionTransformer<E> im
/**
* The adapted collection has to be filled.
*/
- private final Collection<? super E> toFill;
+ private final C toFill;
// constructors
//---------------------------------------------------
/**
* Create a new CollectionTransformer.
- */
- public CollectionTransformer() {
- this(null);
- }
-
- /**
- * Create a new CollectionTransformer.
* @param toFill Collection to fill
*/
- public CollectionTransformer(Collection<? super E> toFill) {
- Collection<? super E> coll;
- if (toFill == null) {
- coll = new ArrayList<E>();
- } else {
- coll = toFill;
- }
- this.toFill = coll;
+ public CollectionTransformer(C toFill) {
+ this.toFill = Validate.notNull(toFill, "toFill");
}
// instance methods
@@ -73,13 +61,20 @@ public class CollectionTransformer<E> im
/**
* {@inheritDoc}
*/
- @SuppressWarnings("unchecked")
- public Collection<E> evaluate(Generator<? extends E> generator) {
+ public C evaluate(Generator<? extends E> generator) {
generator.run(new UnaryProcedure<E>() {
public void run(E obj) {
toFill.add(obj);
}
});
- return (Collection<E>) toFill;
+ return toFill;
+ }
+
+ /**
+ * Get a {@link CollectionTransformer} instance that simply returns any {@link Collection}.
+ * @return {@link CollectionTransformer}
+ */
+ public static <E> CollectionTransformer<E, Collection<E>> toCollection() {
+ return new CollectionTransformer<E, Collection<E>>(new ArrayList<E>());
}
}
Modified: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/generator/TestBaseGenerator.java
URL: http://svn.apache.org/viewvc/commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/generator/TestBaseGenerator.java?rev=1370922&r1=1370921&r2=1370922&view=diff
==============================================================================
--- commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/generator/TestBaseGenerator.java (original)
+++ commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/generator/TestBaseGenerator.java Wed Aug 8 19:53:37 2012
@@ -154,11 +154,11 @@ public class TestBaseGenerator {
@Test
public void testTo() {
- Collection<Integer> col = (Collection<Integer>)simpleGenerator.to(new CollectionTransformer<Integer>());
+ Collection<Integer> col = simpleGenerator.to(CollectionTransformer.<Integer> toCollection());
assertEquals("[0, 1, 2, 3, 4]", col.toString());
Collection<Integer> fillThis = new LinkedList<Integer>();
- col = (Collection<Integer>) simpleGenerator.to(new CollectionTransformer<Integer>(fillThis));
+ col = simpleGenerator.to(new CollectionTransformer<Integer, Collection<Integer>>(fillThis));
assertSame(fillThis, col);
assertEquals("[0, 1, 2, 3, 4]", col.toString());