Java 将一个值转换为两个类
我想知道如何将对象强制转换为Java 将一个值转换为两个类,java,casting,Java,Casting,我想知道如何将对象强制转换为。我的意思是,我有一个方法,应该是排序值。如果这些值是数字,我想把它们相互比较 我天真的第一次尝试是 Object value1 = getAttributeValueFromHit(hit1, attributeName); Object value2 = getAttributeValueFromHit(hit2, attributeName); : : } else if (value1 instanceof Number) { Nu
。我的意思是,我有一个方法,应该是排序值。如果这些值是数字,我想把它们相互比较
我天真的第一次尝试是
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>>
*/
}
我是否有机会在Java 7中实现这一点?使用泛型类型参数(您可以在方法中定义一个参数,也可以重用在类范围中定义的参数) 以及它的号召:
return compareNumbers((Number) value1, (Number) value2);
@SilviuBurcea试过什么?我尝试了一件事并发布了结果。哇,很好:)我希望您不介意我在您的答案中添加了一个版本的
compareNumbers()
。没问题,有意义:-)
public static <X extends Number & Comparable<X>> int test() {
Object o1 = getAttributeValueFromHit(hit1, attributeName);
Object o2 = getAttributeValueFromHit(hit2, attributeName);
return compareNumbers((X) o1, (X) o2);
}
private <T extends Number & Comparable<T>> int compareNumbers(Number number1, Number number2) {
@SuppressWarnings("unchecked")
T number1Cast = (T) number1;
@SuppressWarnings("unchecked")
T number2Cast = (T) number2;
return number1Cast.compareTo(number2Cast);
}
return compareNumbers((Number) value1, (Number) value2);