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类型
————————————————

原文链接:https://blog.csdn.net/sunzheng12345/article/details/8160686

你可能感兴趣的:(字符串)