[FUNCTOR-22] Added generics to ComparableComparator. Few other classes that used the ComparableComparator were updated too. Tests were also updated accordingly.
git-svn-id: https://svn.apache.org/repos/asf/commons/proper/functor/trunk@1364676 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index c5b835e..1a7ad62 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -23,6 +23,9 @@
</properties>
<body>
<release version="1.0" date="2012-??-??" description="First release.">
+ <action dev="kinow" issue="FUNCTOR-22">
+ Generify ComparableComparator.
+ </action>
<action dev="kinow" issue="FUNCTOR-3">
Reduce the use of raw types in test classes.
</action>
diff --git a/src/main/java/org/apache/commons/functor/core/comparator/ComparableComparator.java b/src/main/java/org/apache/commons/functor/core/comparator/ComparableComparator.java
index 063d533..838c96c 100644
--- a/src/main/java/org/apache/commons/functor/core/comparator/ComparableComparator.java
+++ b/src/main/java/org/apache/commons/functor/core/comparator/ComparableComparator.java
@@ -20,33 +20,37 @@
import java.util.Comparator;
/**
- * See Commons-Collections for a public version
- * of this class.
+ * A {@link Comparator Comparator} that compares {@link Comparable Comparable}
+ * objects.
+ * <p>
+ * This class was created based on commons-collection's ComparableComparator.
*
+ * @param <E> the comparable type
* @version $Revision$ $Date$
*/
-@SuppressWarnings({ "unchecked", "rawtypes" })
-final class ComparableComparator implements Comparator, Serializable {
+final class ComparableComparator<E extends Comparable<? super E>> implements Comparator<E>, Serializable {
/** Singleton. */
- public static final ComparableComparator INSTANCE = new ComparableComparator();
+ @SuppressWarnings("rawtypes")
+ public static final ComparableComparator<?> INSTANCE = new ComparableComparator();
/**
* serialVersionUID declaration.
*/
- private static final long serialVersionUID = -5849476573719561212L;
+ private static final long serialVersionUID = 9098756963321230038L;
/**
* Create a new ComparableComparator.
*/
public ComparableComparator() {
+ super();
}
/**
* {@inheritDoc}
*/
- public int compare(Object o1, Object o2) {
- return ((Comparable) o1).compareTo(o2);
+ public int compare(E o1, E o2) {
+ return o1.compareTo(o2);
}
/**
@@ -75,10 +79,12 @@
/**
* Get a ComparableComparator instance.
+ * @param <E> the comparable type
* @return ComparableComparator
*/
- public static ComparableComparator instance() {
- return INSTANCE;
+ @SuppressWarnings("unchecked")
+ public static <E extends Comparable<? super E>> ComparableComparator<E> instance() {
+ return (ComparableComparator<E>) INSTANCE;
}
}
diff --git a/src/main/java/org/apache/commons/functor/core/comparator/ComparatorFunction.java b/src/main/java/org/apache/commons/functor/core/comparator/ComparatorFunction.java
index 12c451b..0c788a7 100644
--- a/src/main/java/org/apache/commons/functor/core/comparator/ComparatorFunction.java
+++ b/src/main/java/org/apache/commons/functor/core/comparator/ComparatorFunction.java
@@ -102,6 +102,6 @@
*/
@SuppressWarnings("unchecked")
public static <T> ComparatorFunction<T> instance() {
- return new ComparatorFunction<T>(ComparableComparator.INSTANCE);
+ return new ComparatorFunction<T>((Comparator<? super T>) ComparableComparator.INSTANCE);
}
}
diff --git a/src/main/java/org/apache/commons/functor/core/comparator/IsEquivalent.java b/src/main/java/org/apache/commons/functor/core/comparator/IsEquivalent.java
index b6ea029..e9eae29 100644
--- a/src/main/java/org/apache/commons/functor/core/comparator/IsEquivalent.java
+++ b/src/main/java/org/apache/commons/functor/core/comparator/IsEquivalent.java
@@ -45,7 +45,7 @@
/**
* serialVersionUID declaration.
*/
- private static final long serialVersionUID = -6392784113015793664L;
+ private static final long serialVersionUID = 1884411899682486777L;
/**
* The wrapped comparator.
@@ -57,7 +57,7 @@
*/
@SuppressWarnings("unchecked")
public IsEquivalent() {
- this(ComparableComparator.INSTANCE);
+ this((Comparator<? super T>) ComparableComparator.INSTANCE);
}
/**
@@ -132,7 +132,7 @@
*/
@SuppressWarnings("unchecked")
public static <T extends Comparable<?>> IsEquivalent<T> instance() {
- return new IsEquivalent<T>(ComparableComparator.INSTANCE);
+ return new IsEquivalent<T>((Comparator<? super T>) ComparableComparator.INSTANCE);
}
/**
diff --git a/src/main/java/org/apache/commons/functor/core/comparator/IsGreaterThan.java b/src/main/java/org/apache/commons/functor/core/comparator/IsGreaterThan.java
index 9c1c291..96df3ca 100644
--- a/src/main/java/org/apache/commons/functor/core/comparator/IsGreaterThan.java
+++ b/src/main/java/org/apache/commons/functor/core/comparator/IsGreaterThan.java
@@ -44,7 +44,7 @@
/**
* serialVersionUID declaration.
*/
- private static final long serialVersionUID = -8592932496891910273L;
+ private static final long serialVersionUID = 377027098765821021L;
/**
* The wrapped comparator.
@@ -57,7 +57,7 @@
*/
@SuppressWarnings("unchecked")
public IsGreaterThan() {
- this(ComparableComparator.INSTANCE);
+ this((Comparator<? super T>) ComparableComparator.INSTANCE);
}
/**
diff --git a/src/main/java/org/apache/commons/functor/core/comparator/IsGreaterThanOrEqual.java b/src/main/java/org/apache/commons/functor/core/comparator/IsGreaterThanOrEqual.java
index 2a856f4..b460172 100644
--- a/src/main/java/org/apache/commons/functor/core/comparator/IsGreaterThanOrEqual.java
+++ b/src/main/java/org/apache/commons/functor/core/comparator/IsGreaterThanOrEqual.java
@@ -45,7 +45,7 @@
/**
* serialVersionUID declaration.
*/
- private static final long serialVersionUID = 5262405026444050167L;
+ private static final long serialVersionUID = 1550544203070228570L;
/**
* The wrapped comparator.
@@ -58,7 +58,7 @@
*/
@SuppressWarnings("unchecked")
public IsGreaterThanOrEqual() {
- this(ComparableComparator.INSTANCE);
+ this((Comparator<? super T>) ComparableComparator.INSTANCE);
}
/**
diff --git a/src/main/java/org/apache/commons/functor/core/comparator/IsLessThan.java b/src/main/java/org/apache/commons/functor/core/comparator/IsLessThan.java
index 53c4388..efea89c 100644
--- a/src/main/java/org/apache/commons/functor/core/comparator/IsLessThan.java
+++ b/src/main/java/org/apache/commons/functor/core/comparator/IsLessThan.java
@@ -44,7 +44,7 @@
/**
* serialVersionUID declaration.
*/
- private static final long serialVersionUID = 1809153179639613842L;
+ private static final long serialVersionUID = 6948263958172180877L;;
/**
* The wrapped comparator.
@@ -57,7 +57,7 @@
*/
@SuppressWarnings("unchecked")
public IsLessThan() {
- this(ComparableComparator.INSTANCE);
+ this((Comparator<? super T>) ComparableComparator.INSTANCE);
}
/**
diff --git a/src/main/java/org/apache/commons/functor/core/comparator/IsLessThanOrEqual.java b/src/main/java/org/apache/commons/functor/core/comparator/IsLessThanOrEqual.java
index ad2fac1..1a5c888 100644
--- a/src/main/java/org/apache/commons/functor/core/comparator/IsLessThanOrEqual.java
+++ b/src/main/java/org/apache/commons/functor/core/comparator/IsLessThanOrEqual.java
@@ -44,7 +44,7 @@
/**
* serialVersionUID declaration.
*/
- private static final long serialVersionUID = -7270189005780457145L;
+ private static final long serialVersionUID = -5791636848361450563L;
/**
* The wrapped comparator.
@@ -57,7 +57,7 @@
*/
@SuppressWarnings("unchecked")
public IsLessThanOrEqual() {
- this(ComparableComparator.INSTANCE);
+ this((Comparator<? super T>) ComparableComparator.INSTANCE);
}
/**
diff --git a/src/main/java/org/apache/commons/functor/core/comparator/IsNotEquivalent.java b/src/main/java/org/apache/commons/functor/core/comparator/IsNotEquivalent.java
index 38cbef5..f0ef32a 100644
--- a/src/main/java/org/apache/commons/functor/core/comparator/IsNotEquivalent.java
+++ b/src/main/java/org/apache/commons/functor/core/comparator/IsNotEquivalent.java
@@ -57,7 +57,7 @@
*/
@SuppressWarnings("unchecked")
public IsNotEquivalent() {
- this(ComparableComparator.INSTANCE);
+ this((Comparator<? super T>) ComparableComparator.INSTANCE);
}
/**
@@ -132,7 +132,7 @@
*/
@SuppressWarnings("unchecked")
public static <T extends Comparable<?>> IsNotEquivalent<T> instance() {
- return new IsNotEquivalent<T>(ComparableComparator.INSTANCE);
+ return new IsNotEquivalent<T>((Comparator<? super T>) ComparableComparator.INSTANCE);
}
/**
diff --git a/src/main/java/org/apache/commons/functor/core/comparator/Max.java b/src/main/java/org/apache/commons/functor/core/comparator/Max.java
index 7b67740..5569f27 100644
--- a/src/main/java/org/apache/commons/functor/core/comparator/Max.java
+++ b/src/main/java/org/apache/commons/functor/core/comparator/Max.java
@@ -53,7 +53,7 @@
*/
@SuppressWarnings("unchecked")
public Max() {
- this(ComparableComparator.instance());
+ this((Comparator<T>) ComparableComparator.INSTANCE);
}
/**
diff --git a/src/main/java/org/apache/commons/functor/core/comparator/Min.java b/src/main/java/org/apache/commons/functor/core/comparator/Min.java
index a28033f..bface4f 100644
--- a/src/main/java/org/apache/commons/functor/core/comparator/Min.java
+++ b/src/main/java/org/apache/commons/functor/core/comparator/Min.java
@@ -41,7 +41,7 @@
/**
* serialVersionUID declaration.
*/
- private static final long serialVersionUID = 9190170976707323848L;
+ private static final long serialVersionUID = -3538911698805767997L;
/**
* The wrapped comparator.
@@ -53,7 +53,7 @@
*/
@SuppressWarnings("unchecked")
public Min() {
- this(ComparableComparator.instance());
+ this((Comparator<T>) ComparableComparator.INSTANCE);
}
/**
diff --git a/src/test/java/org/apache/commons/functor/core/comparator/TestComparableComparator.java b/src/test/java/org/apache/commons/functor/core/comparator/TestComparableComparator.java
index f9da547..bdeb139 100644
--- a/src/test/java/org/apache/commons/functor/core/comparator/TestComparableComparator.java
+++ b/src/test/java/org/apache/commons/functor/core/comparator/TestComparableComparator.java
@@ -18,7 +18,6 @@
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
import org.junit.Test;
@@ -32,37 +31,22 @@
@Test
public void testCompareIntegers() {
- assertTrue(ComparableComparator.instance().compare(new Integer(Integer.MIN_VALUE),new Integer(Integer.MIN_VALUE)) == 0);
- assertTrue(ComparableComparator.instance().compare(new Integer(-1),new Integer(-1)) == 0);
- assertTrue(ComparableComparator.instance().compare(new Integer(0),new Integer(0)) == 0);
- assertTrue(ComparableComparator.instance().compare(new Integer(Integer.MAX_VALUE),new Integer(Integer.MAX_VALUE)) == 0);
- assertTrue(ComparableComparator.instance().compare(new Integer(1),new Integer(1)) == 0);
+ assertTrue(ComparableComparator.<Integer>instance().compare(new Integer(Integer.MIN_VALUE),new Integer(Integer.MIN_VALUE)) == 0);
+ assertTrue(ComparableComparator.<Integer>instance().compare(new Integer(-1),new Integer(-1)) == 0);
+ assertTrue(ComparableComparator.<Integer>instance().compare(new Integer(0),new Integer(0)) == 0);
+ assertTrue(ComparableComparator.<Integer>instance().compare(new Integer(Integer.MAX_VALUE),new Integer(Integer.MAX_VALUE)) == 0);
+ assertTrue(ComparableComparator.<Integer>instance().compare(new Integer(1),new Integer(1)) == 0);
}
- @Test
- public void testCompareIncomparable() {
- try {
- ComparableComparator.instance().compare(new Object(),new Integer(2));
- fail("Expected ClassCastException");
- } catch(ClassCastException e) {
- // expected
- }
- }
-
- @Test
+ @Test(expected=NullPointerException.class)
public void testCompareNull() {
- try {
- ComparableComparator.instance().compare(null,new Integer(2));
- fail("Expected NullPointerException");
- } catch(NullPointerException e) {
- // expected
- }
+ ComparableComparator.<Integer>instance().compare(null,new Integer(2));
}
@Test
public void testEqualsAndHashCode() {
- assertEquals(new ComparableComparator(),new ComparableComparator());
- assertEquals(new ComparableComparator().hashCode(),new ComparableComparator().hashCode());
- assertTrue(!new ComparableComparator().equals(null));
+ assertEquals(new ComparableComparator<Integer>(),new ComparableComparator<Integer>());
+ assertEquals(new ComparableComparator<Integer>().hashCode(),new ComparableComparator<Integer>().hashCode());
+ assertTrue(!new ComparableComparator<Integer>().equals(null));
}
}
diff --git a/src/test/java/org/apache/commons/functor/core/comparator/TestComparatorFunction.java b/src/test/java/org/apache/commons/functor/core/comparator/TestComparatorFunction.java
index 3b838f5..c52379f 100644
--- a/src/test/java/org/apache/commons/functor/core/comparator/TestComparatorFunction.java
+++ b/src/test/java/org/apache/commons/functor/core/comparator/TestComparatorFunction.java
@@ -75,11 +75,10 @@
}
@Test
- @SuppressWarnings("unchecked")
public void testEquals() {
ComparatorFunction<Comparable<?>> f = ComparatorFunction.instance();
assertObjectsAreEqual(f,f);
- assertObjectsAreEqual(f,new ComparatorFunction<Comparable<?>>(ComparableComparator.INSTANCE));
+ assertObjectsAreEqual(f,new ComparatorFunction<Integer>(ComparableComparator.<Integer>instance()));
assertObjectsAreNotEqual(f,new ComparatorFunction<Boolean>(Collections.reverseOrder()));
}
}
diff --git a/src/test/java/org/apache/commons/functor/core/comparator/TestIsEquivalent.java b/src/test/java/org/apache/commons/functor/core/comparator/TestIsEquivalent.java
index 7d6f265..5ca3d2f 100644
--- a/src/test/java/org/apache/commons/functor/core/comparator/TestIsEquivalent.java
+++ b/src/test/java/org/apache/commons/functor/core/comparator/TestIsEquivalent.java
@@ -55,13 +55,12 @@
}
@Test
- @SuppressWarnings("unchecked")
public void testEquals() throws Exception {
IsEquivalent<Comparable<?>> p = IsEquivalent.INSTANCE;
assertEquals(p,p);
assertObjectsAreEqual(p,IsEquivalent.instance());
- assertObjectsAreEqual(p,new IsEquivalent<Comparable<?>>(new ComparableComparator()));
+ assertObjectsAreEqual(p,new IsEquivalent<Integer>(ComparableComparator.<Integer>instance()));
assertObjectsAreNotEqual(p,Constant.FALSE);
}
diff --git a/src/test/java/org/apache/commons/functor/core/comparator/TestIsGreaterThan.java b/src/test/java/org/apache/commons/functor/core/comparator/TestIsGreaterThan.java
index 9d91535..2b7e059 100644
--- a/src/test/java/org/apache/commons/functor/core/comparator/TestIsGreaterThan.java
+++ b/src/test/java/org/apache/commons/functor/core/comparator/TestIsGreaterThan.java
@@ -56,13 +56,12 @@
}
@Test
- @SuppressWarnings("unchecked")
public void testEquals() throws Exception {
IsGreaterThan<Comparable<?>> p = new IsGreaterThan<Comparable<?>>();
assertEquals(p,p);
assertObjectsAreEqual(p,new IsGreaterThan<Comparable<?>>());
- assertObjectsAreEqual(p,new IsGreaterThan<Comparable<?>>(new ComparableComparator()));
+ assertObjectsAreEqual(p,new IsGreaterThan<Integer>(ComparableComparator.<Integer>instance()));
assertObjectsAreEqual(p,IsGreaterThan.instance());
assertObjectsAreNotEqual(p,Constant.FALSE);
}
diff --git a/src/test/java/org/apache/commons/functor/core/comparator/TestIsGreaterThanOrEqual.java b/src/test/java/org/apache/commons/functor/core/comparator/TestIsGreaterThanOrEqual.java
index 1ee0535..2a7be35 100644
--- a/src/test/java/org/apache/commons/functor/core/comparator/TestIsGreaterThanOrEqual.java
+++ b/src/test/java/org/apache/commons/functor/core/comparator/TestIsGreaterThanOrEqual.java
@@ -56,13 +56,12 @@
}
@Test
- @SuppressWarnings("unchecked")
public void testEquals() throws Exception {
IsGreaterThanOrEqual<Comparable<?>> p = new IsGreaterThanOrEqual<Comparable<?>>();
assertEquals(p,p);
assertObjectsAreEqual(p,new IsGreaterThanOrEqual<Comparable<?>>());
- assertObjectsAreEqual(p,new IsGreaterThanOrEqual<Comparable<?>>(new ComparableComparator()));
+ assertObjectsAreEqual(p,new IsGreaterThanOrEqual<Integer>(ComparableComparator.<Integer>instance()));
assertObjectsAreEqual(p,IsGreaterThanOrEqual.instance());
assertObjectsAreNotEqual(p,Constant.FALSE);
}
diff --git a/src/test/java/org/apache/commons/functor/core/comparator/TestIsLessThan.java b/src/test/java/org/apache/commons/functor/core/comparator/TestIsLessThan.java
index a476a1f..64cce4f 100644
--- a/src/test/java/org/apache/commons/functor/core/comparator/TestIsLessThan.java
+++ b/src/test/java/org/apache/commons/functor/core/comparator/TestIsLessThan.java
@@ -56,13 +56,12 @@
}
@Test
- @SuppressWarnings("unchecked")
public void testEquals() throws Exception {
IsLessThan<Comparable<?>> p = new IsLessThan<Comparable<?>>();
assertEquals(p,p);
assertObjectsAreEqual(p,new IsLessThan<Comparable<?>>());
- assertObjectsAreEqual(p,new IsLessThan<Comparable<?>>(new ComparableComparator()));
+ assertObjectsAreEqual(p,new IsLessThan<Integer>(ComparableComparator.<Integer>instance()));
assertObjectsAreEqual(p,IsLessThan.instance());
assertObjectsAreNotEqual(p,Constant.FALSE);
}
diff --git a/src/test/java/org/apache/commons/functor/core/comparator/TestIsLessThanOrEqual.java b/src/test/java/org/apache/commons/functor/core/comparator/TestIsLessThanOrEqual.java
index d606f6e..2403f11 100644
--- a/src/test/java/org/apache/commons/functor/core/comparator/TestIsLessThanOrEqual.java
+++ b/src/test/java/org/apache/commons/functor/core/comparator/TestIsLessThanOrEqual.java
@@ -56,13 +56,12 @@
}
@Test
- @SuppressWarnings("unchecked")
public void testEquals() throws Exception {
IsLessThanOrEqual<Comparable<?>> p = new IsLessThanOrEqual<Comparable<?>>();
assertEquals(p,p);
assertObjectsAreEqual(p,new IsLessThanOrEqual<Comparable<?>>());
- assertObjectsAreEqual(p,new IsLessThanOrEqual<Comparable<?>>(new ComparableComparator()));
+ assertObjectsAreEqual(p,new IsLessThanOrEqual<Integer>(ComparableComparator.<Integer>instance()));
assertObjectsAreEqual(p,IsLessThanOrEqual.instance());
assertObjectsAreNotEqual(p,Constant.FALSE);
}
diff --git a/src/test/java/org/apache/commons/functor/core/comparator/TestIsNotEquivalent.java b/src/test/java/org/apache/commons/functor/core/comparator/TestIsNotEquivalent.java
index 5c0fc9d..8b98c1f 100644
--- a/src/test/java/org/apache/commons/functor/core/comparator/TestIsNotEquivalent.java
+++ b/src/test/java/org/apache/commons/functor/core/comparator/TestIsNotEquivalent.java
@@ -55,12 +55,11 @@
}
@Test
- @SuppressWarnings("unchecked")
public void testEquals() throws Exception {
IsNotEquivalent<Comparable<?>> p = new IsNotEquivalent<Comparable<?>>();
assertEquals(p,p);
- assertObjectsAreEqual(p,new IsNotEquivalent<Comparable<?>>(new ComparableComparator()));
+ assertObjectsAreEqual(p,new IsNotEquivalent<Integer>(ComparableComparator.<Integer>instance()));
assertObjectsAreEqual(p,IsNotEquivalent.instance());
assertObjectsAreNotEqual(p,Constant.FALSE);
}
diff --git a/src/test/java/org/apache/commons/functor/core/comparator/TestMax.java b/src/test/java/org/apache/commons/functor/core/comparator/TestMax.java
index dbea313..9fd8022 100644
--- a/src/test/java/org/apache/commons/functor/core/comparator/TestMax.java
+++ b/src/test/java/org/apache/commons/functor/core/comparator/TestMax.java
@@ -56,12 +56,11 @@
}
@Test
- @SuppressWarnings("unchecked")
public void testEquals() {
Max<Comparable<?>> f = Max.instance();
assertObjectsAreEqual(f,f);
assertObjectsAreEqual(f,Max.instance());
- assertObjectsAreEqual(f,new Max<Comparable<?>>(ComparableComparator.INSTANCE));
+ assertObjectsAreEqual(f,new Max<Integer>(ComparableComparator.<Integer>instance()));
assertObjectsAreNotEqual(f,new Max<Comparable<?>>(Collections.<Comparable<?>>reverseOrder()));
}
}
diff --git a/src/test/java/org/apache/commons/functor/core/comparator/TestMin.java b/src/test/java/org/apache/commons/functor/core/comparator/TestMin.java
index f53125d..e9f4815 100644
--- a/src/test/java/org/apache/commons/functor/core/comparator/TestMin.java
+++ b/src/test/java/org/apache/commons/functor/core/comparator/TestMin.java
@@ -56,12 +56,11 @@
}
@Test
- @SuppressWarnings("unchecked")
public void testEquals() {
Min<Comparable<?>> f = Min.instance();
assertObjectsAreEqual(f,f);
assertObjectsAreEqual(f,Min.instance());
- assertObjectsAreEqual(f,new Min<Comparable<?>>(ComparableComparator.INSTANCE));
+ assertObjectsAreEqual(f,new Min<Integer>(ComparableComparator.<Integer>instance()));
assertObjectsAreNotEqual(f,new Min<Comparable<?>>(Collections.<Comparable<?>>reverseOrder()));
}
}