JAVA8 的转换是什么?

What is casting for JAVA8?

有人可以解释为什么 TextMessage textMessage = (TextMessage) message; 有效吗? (JAVA 8)

TextMessage inherits Message

消息不是 Clonable

的实例
if(message instanceof TextMessage) {
   TextMessage textMessage = (TextMessage) message; 
   String body = textMessage.getBody(); 
}

预期的产出很好。

之所以有效,是因为当您将 textMessage 设置为等于它时,您正在转换消息对象。实际上,您是在告诉 Java 忽略它认为消息是什么,而是将其视为 TextMessage 对象。这意味着它将通过编译器阶段。

在您的代码中,您已经尽职尽责地预先检查该消息是否真的是 TextMessage。如果你没有这样做,如果在任何时候你的代码 运行 其中消息不是 TextMessage 你会得到一个 Java class 转换异常。