类型转换括起括号的原因

时间:2017-04-21 05:26:08

标签: java object methods type-conversion

if (obj instanceof String) {
    return (String) obj;
} else {
    return ((BlogPost) obj).getTitle(); 

为什么返回引用BlogPost的行需要将括号括在引用objBlogPost周围?

4 个答案:

答案 0 :(得分:5)

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

(BlogPost) obj.getTitle();

意味着:将getTitle()的返回值转换为BlogPost。虽然与parentesises声明:

((BlogPost) obj).getTitle();

表示:将obj投射到BlogPost类型,然后在getTitle()类型的实例上调用方法BlogPost

答案 1 :(得分:1)

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

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

虽然这会为getTitle执行obj(可能没有为此类定义)并将结果转换为BlogPost(这对{{1}不起作用}})

String -> BlogPost

最后,这是决定执行代码的决定因素,以便让return (BlogPost) obj.getTitle(); 具有正确的上下文。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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