if (obj instanceof String) {
return (String) obj;
} else {
return ((BlogPost) obj).getTitle();
为什么返回引用BlogPost
的行需要将括号括在引用obj
和BlogPost
周围?
答案 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()类型。