ClassCastException与“不可转换的类型”编译错误

时间:2014-02-18 20:17:30

标签: java casting compiler-errors classcastexception

所以我想知道Java抛出ClassCastException的情况以及何时出现“不可转换的类型”编译错误。我猜这是关于接口的东西。

我的意思是接口有更困难的情况。例如:

interface SomeInterface {}
class SomeClass {}
SomeClass someObject = new SomeClass();
SomeInterface someInterface  = (SomeInterface)someObject;

抛出ClassCastException以为在编译时很明显,SomeClass对象无法转换为SomeInterface

2 个答案:

答案 0 :(得分:3)

接口没有必要。演员告诉编译器你将从另一种类型的变量引用一种类型的实例。

如果无法使用强制转换建议的类型转换,则会出现编译错误。

即。 String s = (String) new Integer(1);

有时候有可能,有时候没有,代码会编译,但是你可能会遇到ClassCastException。

即。

Object o = ...;
String s = (String) o;//Depending on the content of o, this line may throw a ClassCastException

答案 1 :(得分:0)

  • 如果您使用界面,那么通常会有一个运行时异常。
  • 如果您使用,那么通常您会有编译时间 错误。

例如:

interface Fruct{}
class Banana{}
Fruct fruct = (Fruct) new Banana();       // Compile OK, but throw a ClassCastException

vs。

class Fruct{}           
class Banana{}
Fruct fruct = (Fruct) new Banana();          // Compile-Time-Error: Inconvertible types