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);