首页 > 解决方案 > 每次引用转换对象时都需要使用括号吗?

问题描述

我正在关注关于 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) 有括号,而不是简单地没有?

同一段代码上的一篇文章说,需要用括号正确地转换对象。然而

  1. 这不是在第 2 行和第 3 行已经完成的吗?
  2. 另外,如果真的是这样,那为什么isLargerThan(obj2)isLargerThan((obj2))

标签: java

解决方案


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 级)。


推荐阅读