gpt4 book ai didi

Java 泛型 : Comparing an Integer to a Double

转载 作者:搜寻专家 更新时间:2023-11-01 01:54:34 26 4
gpt4 key购买 nike

谁能帮我用泛型比较 Integer 和 Double?

这是我的:

public static <T extends Comparable<? super T>> int compare(T arg1, T arg2)
{
return arg1.compareTo(arg2);
}

public static void main(String[] args)
{
Number i = new Integer(5);
Number j = new Double(7);

System.out.println(GenericsTest.compare(i, j));
}

我得到的错误信息是:绑定(bind)不匹配:GenericsTest 类型的通用方法 compare(T, T) 不适用于参数 (Number, Number)。推断类型 Number 不是有界参数的有效替代 >

最佳答案

此解决方案的想法是扩大到 BigDecimal,然后比较两个数字(现在更清晰,但不知何故格式化不起作用)。请注意,您可以重复使用此静态比较器,而不必在其他任何地方强制转换为 double 。在实现中,您确实需要转换为 double 以不丢失信息,基本上您扩大到最一般的表示形式。

private static final Comparator<Number> NUMBER_COMPARATOR = new Comparator<Number>() {
private BigDecimal createBigDecimal(Number value) {
BigDecimal result = null;
if (value instanceof Short) {
result = BigDecimal.valueOf(value.shortValue());
} else
if (value instanceof Long) {
result = BigDecimal.valueOf(value.longValue());
} else
if (value instanceof Float) {
result = BigDecimal.valueOf(value.floatValue());
} else
if (value instanceof Double) {
result = BigDecimal.valueOf(value.doubleValue());
} else
if (value instanceof Integer) {
result = BigDecimal.valueOf(value.intValue());
} else {
throw new IllegalArgumentException("unsupported Number subtype: " + value.getClass().getName());
}
assert(result != null);

return result;
}

public int compare(Number o1, Number o2) {
return createBigDecimal(o1).compareTo(createBigDecimal(o2));
};
};

public static void main(String[] args) {
Number i = Integer.valueOf(5);
Number j = Double.valueOf(7);
// -1
System.out.println(NUMBER_COMPARATOR.compare(i, j));

i = Long.MAX_VALUE;
j = Long.valueOf(7);
// +1
System.out.println(NUMBER_COMPARATOR.compare(i, j));

i = Long.MAX_VALUE;
j = Long.valueOf(-7);
// +1
System.out.println(NUMBER_COMPARATOR.compare(i, j));

i = Long.MAX_VALUE;
j = Double.MAX_VALUE;
// -1
System.out.println(NUMBER_COMPARATOR.compare(i, j));

i = Long.MAX_VALUE;
j = Long.valueOf(Long.MAX_VALUE - 1);
// +1
System.out.println(NUMBER_COMPARATOR.compare(i, j));

// sorting Long values
Long[] values = new Long[] {Long.valueOf(10), Long.valueOf(-1), Long.valueOf(4)};
Arrays.sort(values, NUMBER_COMPARATOR);
// [-1, 4, 10]
System.out.println(Arrays.toString(values));
}

关于Java 泛型 : Comparing an Integer to a Double,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13759844/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com