的
format()方法
DecimalFormat超载。
在工作情况下,您正在调用:
public final String format(double number)
在失败的情况下,您正在调用:
public final String format (Object obj)
第一种方法有一个非常具体的参数。它期望一个
double。
与第二种情况不同,接受的类型非常广泛:
Object在这种情况下,对传递的类型的检查在运行时执行。
通过提供一个不是a
double而是a 的参数,
String调用的方法是第二个方法。
引擎盖下,此方法依赖于
format(Object number, StringBuffer toAppendTo, FieldPositionpos)一个期望的方法
number的论点,即是实例
Number类(
Short,
Long,…
Double):
@Overridepublic final StringBuffer format(Object number,StringBuffer toAppendTo,FieldPosition pos) { if (number instanceof Long || number instanceof Integer || number instanceof Short || number instanceof Byte || number instanceof AtomicInteger || number instanceof AtomicLong || (number instanceof BigInteger && ((BigInteger)number).bitLength () < 64)) { return format(((Number)number).longValue(), toAppendTo, pos); } else if (number instanceof BigDecimal) { return format((BigDecimal)number, toAppendTo, pos); } else if (number instanceof BigInteger) { return format((BigInteger)number, toAppendTo, pos); } else if (number instanceof Number) { return format(((Number)number).doublevalue(), toAppendTo, pos); } else { throw new IllegalArgumentException("Cannot format given Object as a Number"); }}
但事实并非如此,因为您将
String实例传递给它。
要解决该问题,可以
double像成功案例中那样传递原语,也可以将您
String转换为
Number诸如
Doublewith
的实例
Double.valueOf(yourString)。
我建议采用第一种方式(通过
double),因为它在已经使用
double原语的代码中更加自然。
第二个需要从
String到的附加转换 *** 作
Double。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)