java.lang.String cannot be cast to java.lang.Integer报错

问题只是源于在调试的时候发现的一句微不足道的一行代码如下:

/*su.setOperType((Integer)param.get(SpeedMessageKey.OPERTYPE.getValue()));*/
首先 将现出上面各个类的原型

public enum SpeedMessageKey {

/**
* 申请操作0:开始提速;1:停止提速
*/
OPERTYPE("operType"),
SpeedMessageKey(String value){
this.value = value;
}
private String value;

public String getValue(){
return this.value;
}
}这个是枚举类,枚举类中有这个OPERTYPE这个元素。

而param定义的是一个map如下:

Map param = reqMessage.getBody();


SpeedMessageKey.OPERTYPE.getValue()这个是个String类型

而在su这个对象中定义了 private Integer operType;

在将String类型强制转换成Integer时 语法没错,但是在编译的时候我们会错。。。就会报java.lang.String cannot be cast to java.lang.Integer

从文字而言可以看出是  String不能转换成Integer类型

那么就用valueof

Object operType = param.get(SpeedMessageKey.OPERTYPE.getValue());
if( operType instanceof String){
   su.setOperType(Integer.valueOf((String)operType));
}else{
   su.setOperType((Integer)operType);
}
从API中可以看到这个函数。。一个基本类型的数据是不能强制转换成引用类型的 反之也是一样。。

在回首 java类型中的转换 小可转大  大转小会失去精度。。

举个例子

class Conversion {
public static void main(String args[]) {
byte b;
int i = 257;
b = (byte) i;
System.out.println(b);
}
}
这时你认为会输出多少了  告诉你是1

大转小 失去精度。。。

byte是8位的,最大值是256,
int是32位的,

257表示成二进制的时候,是
100000001,
如果int的强制类型转换成byte型,则要取低8位,也就是要把,其余的位丢掉。
所以,257强制类型转换成byte的时候,只能留下00000001,也就是1 了
这是在百度上看到的一个经典例子

一下是一些常见的转换:

如何将字串 String 转换成整数 int? 
int i = Integer.valueOf(my_str).intValue();
int i=Integer.parseInt(str);

如何将字串 String 转换成Integer ?
Integer integer=Integer.valueOf(str);

如何将整数 int 转换成字串 String ? 
1.) String s = String.valueOf(i);
2.) String s = Integer.toString(i); 
3.) String s = "" + i; 

如何将整数 int 转换成Integer ? 
Integer integer=new Integer(i);

如何将Integer 转换成 int ? 
int num=Integer.intValue();

如何将String转换成 BigDecimal ? 
BigDecimal d_id = new BigDecimal(str);

如何将 String 转换成 char ?
char[] ca="123".toCharArray();

如何将char转换成String?
String s=ca.toString();      //任何类型都可以采用toString()转换成String类型







你可能感兴趣的:(常见错误集)