Coming from this answer I'm wondering how I can cast an object to <T extends Number & Comparable<T>>
. I mean I have a method that is supposed to sort values. And in case the values are numbers I want to compare them with each other.
My naive first attempt was
Object value1 = getAttributeValueFromHit(hit1, attributeName);
Object value2 = getAttributeValueFromHit(hit2, attributeName);
:
:
} else if (value1 instanceof Number) {
Number nValue1 = (Number & Comparable<Number>) value1;
/*
Multiple markers at this line
- Type safety: Unchecked cast from Object to Number & Comparable<Number>
- Additional bounds are not allowed in cast operator at source levels below 1.8
*/
Number nValue2 = (Number & Comparable<Number>) value2;
/* same as above */
return compareNumbers(nValue1, nValue2);
/*
Multiple markers at this line
- Type safety: Unchecked cast from Object to Number & Comparable<Number>
- Type safety: Unchecked cast from Object to Number & Comparable<Number>
- Bound mismatch: The generic method compareNumbers(T, T) of type DataHitComparator is not applicable for the arguments (Number, Number). The inferred type Number is not a valid substitute for the bounded parameter <T extends Number & Comparable<T>>
- Bound mismatch: The generic method compareNumbers(T, T) of type DataHitComparator is not applicable for the arguments (Number & Comparable<Number>, Number & Comparable<Number>). The inferred type Number & Comparable<Number> is not a valid substitute for the bounded parameter <T extends Number & Comparable<T>>
*/
}
compareNumbers()
is based on the linked answer:
private <T extends Number & Comparable<T>> int compareNumbers(T n1, T n2) {
return n1.compareTo(n2);
}
Do I have any chance to make this work with Java 7?