java - 每次引用转换对象时都需要使用括号吗?
问题描述
我正在关注关于 Java的Oracle 教程。在“将接口用作类型”一章中,有以下代码。
public Object findLargest(Object object1, Object object2) {
Relatable obj1 = (Relatable)object1;
Relatable obj2 = (Relatable)object2;
if ((obj1).isLargerThan(obj2) > 0)
return object1;
else
return object2;
}
}
我想我理解了第 2 行和第 3 行:我将 object1(分别为 object2)转换为一个Relatable
类型,并且我给这个标签命名为“obj1”(obj2 resp.)。
这是我不明白的下一行:
为什么 (obj1) 有括号,而不是简单地没有?
同一段代码上的一篇文章说,需要用括号正确地转换对象。然而
- 这不是在第 2 行和第 3 行已经完成的吗?
- 另外,如果真的是这样,那为什么
isLargerThan(obj2)
呢isLargerThan((obj2))
?
解决方案
obj1
不需要周围的括号。但是,它们在语法上并没有错。
但是,如果您要进行内联转换,则需要括号,即
public Object findLargest(Object object1, Object object2) {
if (((Relatable)object1).isLargerThan((Relatable)object2) > 0)
return object1;
else
return object2;
}
将是与您的代码等效的代码。现在,您需要在 周围加上括号(Relatable)object2
,因为 之前的点isLargerThan
比强制转换运算符具有更高的优先级。见 e。g此运算符优先级表:强制转换在第 13 级,而用于成员访问的点具有最高优先级(第 16 级)。
推荐阅读
- unity3d - 如何更改预制件的层次结构
- postgresql - 在 postgresql 中拆分
- python-3.x - 删除重复和连接熊猫
- python - 冻结在 .after() Tkinter 中并进行串行读取
- java - Spring jpa 实体管理器 getResultList 从多个表返回数据以适应非模型类
- python - 从 xml 获取用户数据
- mysql - 如何在 MySQL 数据库的表中查找最近修改的行?
- python - Python中定义的模块类在哪里?
- xml - 已为元素“xxx”指定了绑定到命名空间“xx”的属性“x”
- ios - Xcode 11.4 beta 错误“无效的工具链”