java中的Enum强制转换

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中的Enum强制转换相关的知识,希望对你有一定的参考价值。

定义了一个接口为
public interface Type
然后定义一个Enum类型实现了这个接口
public enum DetailType implements Type
RED,BLUE,BLACK,YELLO

在程序中,将一个object类型强制转换为Type类型
Type a = (Type)Object;
为什么每次都会抛出这样的错误:java.lang.ClassCastException: java.lang.String cannot be cast to Type
即使我改成了DetailType也是一样的错误,有没有人遇到过这样的错误

参考技术A 你要看object是什么类型。大小写不对应,如果是Object肯定出错了。

其实,enum 不需要接口定义
参考技术B 人才,枚举实现接口....追问

人不人才的,先上答案吧。如果是单纯的枚举类型,别管那个接口

关于java中的short和int类型转换的问题

public static void main(String[] args)
/**
* += 会把后面的数值自动强制转换为前面的类型,然后在那块内存上直接修改数值;
* = 是会在把后面的数值赋值到前面的变量时检测类型是否相同( 非自动强制转换!)如果是高精度到低精度的,需要报错,告诉程序员会loss of data
*/
short w = 0;
short s = 0;
int i = 32768;//1000 0000 0000 0000
int j = 32767;// 111 1111 1111 1111

System.out.println("the i");
s += i;
w = (short) (w + i);
System.out.println(i);//32768
System.out.println(s);//-32768
System.out.println(w); //-32768

System.out.println("the j");
s += j;
w = (short) (w + j);
System.out.println(j);//32767
System.out.println(s);//-1
System.out.println(w);//-1




这些“//”后面的是输出的结果,我没看明白这些转换是怎么运行的,求大神指点。。。

java中的short和int类型转换,当将一个数值范围小的类型赋给一个数值范围大的数值型变量,jvm在编译过程中俊将此数值的类型进行了自动提升。实例如下:

参考技术A 这些数字在内存中都是 以补码形式保存的。

其中int类型为32位
short类型为16位

在int向short转换时 会发生溢出。

要想看懂 就把他们的二进制形式写出来就好了~追问

我听说short有一位是存放符号的,也就是说short只有十五位二进制字符来存放数值。
32767的数值 转化为short不会发生溢出的

i= 32767;// 111 1111 1111 1111
short j=0;//0
j+=i;//0+= 111 1111 1111 1111
j;// 111 1111 1111 1111 输出的应该是32767?而实际输出的是-1?

本回答被提问者采纳

以上是关于java中的Enum强制转换的主要内容,如果未能解决你的问题,请参考以下文章

Java中的强制类型转换是如何转换的?

java中的强制类型转换

java中的强制类型转换

C++中的数据类型强制转换

Java学习_数据类型转换

接口中的 Java 强制转换