Java类型转换在System.out.println调用中产生编译错误

Java类型转换在System.out.println调用中产生编译错误,java,casting,compiler-errors,runtime,Java,Casting,Compiler Errors,Runtime,在下面的代码中,第一行给出了一个编译错误(getAttributeMethod找不到符号)。第二条线按预期工作。system.out.println调用是否由编译器拾取,编译后是否解决类型转换?情况似乎并非如此,因此我不太明白在这种情况下发生了什么 System.out.println((Element) ev.getTarget().getAttribute("id")); Element temp = (Element) ev.getTarget(); System.out.println(

在下面的代码中,第一行给出了一个编译错误(getAttributeMethod找不到符号)。第二条线按预期工作。system.out.println调用是否由编译器拾取,编译后是否解决类型转换?情况似乎并非如此,因此我不太明白在这种情况下发生了什么

System.out.println((Element) ev.getTarget().getAttribute("id"));
Element temp = (Element) ev.getTarget();
System.out.println(temp.getAttribute("id"));

你必须这样施展:

System.out.println(((Element) ev.getTarget()).getAttribute("id"));

如果您没有强制转换getTarget的返回元素(我假设它是Object),编译器将在类对象中查找函数“getAttribute”,但找不到它,因此会出现编译器错误。

您必须按如下方式强制转换它:

System.out.println(((Element) ev.getTarget()).getAttribute("id"));

如果您没有强制转换getTarget的返回元素(我假设它是Object),编译器会在类对象中查找函数“getAttribute”,但找不到它,因此会给出一个编译器错误。

正确答案,但解释为什么需要它会使它成为更好的答案。更新它以获得更多解释Close,但这并不是编译器在对象中寻找getAttribute方法,而是编译器在中寻找getAttribute方法,因为这是.Correct answer的返回类型,但是解释为什么需要它会使它成为更好的答案。更新它以获得更多解释Close,但这并不是编译器在对象中查找getAttribute方法,而是编译器在中查找getAttribute方法,因为这是.Operator优先级的.replication的返回类型<代码>优先于强制转换。运算符优先级可能重复<代码>优先于强制转换。