【发布时间】: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
if (obj instanceof String) {
return (String) obj;
} else {
return ((BlogPost) obj).getTitle();
为什么返回BlogPost 的tite 的行需要用括号括住引用obj 和BlogPost?
【问题讨论】:
标签: java object methods type-conversion
假设obj 的引用与BlogPost 的类型不同,则语句((BlogPost) obj) 将obj 转换为BlogPost 类型。没有括号的语句:
(BlogPost) obj.getTitle();
意思是:将getTitle() 的返回值转换为BlogPost。 While with parentesises 声明:
((BlogPost) obj).getTitle();
表示:将obj 转换为BlogPost 类型,然后在BlogPost 类型的实例上调用getTitle() 方法。
【讨论】:
这会将obj 转换为BlogPost 并在此上下文下执行getTitle。
return ((BlogPost) obj).getTitle();
而这将为obj 执行getTitle(可能未为此类定义)并将结果转换为BlogPost(这不适用于String -> BlogPost)
return (BlogPost) obj.getTitle();
最后,这是代码执行顺序的决定因素,以便让obj 具有正确的上下文。
【讨论】:
这在 Java 中称为类型转换。请参阅此 Oracle 的 Java 文档中的 Casting Objects 部分:https://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html
【讨论】:
((博文) obj).getTitle(); 将对象转换为 blogpost 类型,然后调用 getTitle() 方法。 如果写成 (BlogPost) obj.getTitle();,它将从 getTitle() 方法中获取返回值,然后将其转换为 BlogPost() 的类型。
【讨论】: