--- old/src/share/classes/javax/swing/SpinnerNumberModel.java 2014-06-30 09:09:33.000000000 -0700 +++ new/src/share/classes/javax/swing/SpinnerNumberModel.java 2014-06-30 09:09:32.000000000 -0700 @@ -84,7 +84,11 @@ public class SpinnerNumberModel extends AbstractSpinnerModel implements Serializable { private Number stepSize, value; - private Comparable minimum, maximum; + // Both minimum and maximum are logically Comparable, but that type is more awkward to use. It safe to cast + // Comparable to Comparable since all Comparables will + // have a compare(Object> method, possibly as a bridge. + private Comparable minimum, maximum; /** @@ -117,12 +121,16 @@ * null or if the following expression is false: * minimum <= value <= maximum */ - public SpinnerNumberModel(Number value, Comparable minimum, Comparable maximum, Number stepSize) { + @SuppressWarnings("unchecked") // Casts to Comparable + public SpinnerNumberModel(Number value, + Comparable minimum, + Comparable maximum, + Number stepSize) { if ((value == null) || (stepSize == null)) { throw new IllegalArgumentException("value and stepSize must be non-null"); } - if (!(((minimum == null) || (minimum.compareTo(value) <= 0)) && - ((maximum == null) || (maximum.compareTo(value) >= 0)))) { + if (!(((minimum == null) || (((Comparable)minimum).compareTo(value) <= 0)) && + ((maximum == null) || (((Comparable)maximum).compareTo(value) >= 0)))) { throw new IllegalArgumentException("(minimum <= value <= maximum) is false"); } this.value = value; @@ -212,7 +220,7 @@ * @see #setMaximum * @see SpinnerModel#addChangeListener */ - public void setMinimum(Comparable minimum) { + public void setMinimum(Comparable minimum) { if ((minimum == null) ? (this.minimum != null) : !minimum.equals(this.minimum)) { this.minimum = minimum; fireStateChanged(); @@ -226,7 +234,7 @@ * @return the value of the minimum property * @see #setMinimum */ - public Comparable getMinimum() { + public Comparable getMinimum() { return minimum; } @@ -259,7 +267,7 @@ * @see #setMinimum * @see SpinnerModel#addChangeListener */ - public void setMaximum(Comparable maximum) { + public void setMaximum(Comparable maximum) { if ((maximum == null) ? (this.maximum != null) : !maximum.equals(this.maximum)) { this.maximum = maximum; fireStateChanged(); @@ -273,7 +281,7 @@ * @return the value of the maximum property * @see #setMaximum */ - public Comparable getMaximum() { + public Comparable getMaximum() { return maximum; } @@ -317,7 +325,7 @@ return stepSize; } - + @SuppressWarnings("unchecked") // Casts to Comparable private Number incrValue(int dir) { Number newValue; @@ -329,8 +337,7 @@ else { newValue = new Float(v); } - } - else { + } else { long v = value.longValue() + (stepSize.longValue() * (long)dir); if (value instanceof Long) { @@ -347,10 +354,10 @@ } } - if ((maximum != null) && (maximum.compareTo(newValue) < 0)) { + if ((maximum != null) && (((Comparable)maximum).compareTo(newValue) < 0)) { return null; } - if ((minimum != null) && (minimum.compareTo(newValue) > 0)) { + if ((minimum != null) && (((Comparable)minimum).compareTo(newValue) > 0)) { return null; } else {