【问题标题】:Reason of enclosing parenthesis for type cast类型转换用括号括起来的原因
【发布时间】:2017-04-21 05:26:07
【问题描述】:
if (obj instanceof String) {
    return (String) obj;
} else {
    return ((BlogPost) obj).getTitle(); 

为什么返回BlogPost 的tite 的行需要用括号括住引用obj 和BlogPost?

【问题讨论】:

    标签: java object methods type-conversion


    【解决方案1】:

    假设obj 的引用与BlogPost 的类型不同,则语句((BlogPost) obj) 将obj 转换为BlogPost 类型。没有括号的语句:

    (BlogPost) obj.getTitle();
    

    意思是:将getTitle() 的返回值转换为BlogPost。 While with parentesises 声明:

    ((BlogPost) obj).getTitle();
    

    表示:将obj 转换为BlogPost 类型,然后在BlogPost 类型的实例上调用getTitle() 方法。

    【讨论】:

      【解决方案2】:

      这会将obj 转换为BlogPost 并在此上下文下执行getTitle。

      return ((BlogPost) obj).getTitle(); 
      

      而这将为obj 执行getTitle(可能未为此类定义)并将结果转换为BlogPost(这不适用于String -> BlogPost)

      return (BlogPost) obj.getTitle(); 
      

      最后,这是代码执行顺序的决定因素,以便让obj 具有正确的上下文。

      【讨论】:

        【解决方案3】:

        这在 Java 中称为类型转换。请参阅此 Oracle 的 Java 文档中的 Casting Objects 部分:https://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html

        【讨论】:

          【解决方案4】:

          ((博文) obj).getTitle(); 将对象转换为 blogpost 类型,然后调用 getTitle() 方法。 如果写成 (BlogPost) obj.getTitle();,它将从 getTitle() 方法中获取返回值,然后将其转换为 BlogPost() 的类型。

          【讨论】:

            猜你喜欢
            • 2023-03-06
            • 1970-01-01
            • 2018-09-30
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-08-25
            • 2011-03-06
            • 2015-04-19
            相关资源
            最近更新 更多