1、场景

最近在使用String的valueOf方法时报错java.lang.ClassCastException,模拟代码如下:

private static Map<String, Object> map = new HashMap<>();
	
static{
	map.put("billId", 123456789L);
}

public static <T> T getParamValue(String param){
	return (T) map.get(param);
}

public static void main(String[] args) {
	System.out.println(String.valueOf(getParamValue("billId")));
}

断点调式:

执行时报错:

Exception in thread "main" java.lang.ClassCastException: java.lang.Long cannot be cast to [C

2、处理方法

经分析,应该是方法使用了泛型导致调用valueOf方法时找的是valueOf(char data[])而不是valueOf(long l)。处理方式如下:

//如果确定值的类型,则可以直接用Long
Object billId = getParamValue("billId");
System.out.println(String.valueOf(billId));