if (obj instanceof String) {
return (String) obj;
} else {
return ((BlogPost) obj).getTitle();
爲什麼要圍繞基準obj
和BlogPost
包裹返回的BlogPost
的滴度需要括號行?原因封閉括號類型的投
if (obj instanceof String) {
return (String) obj;
} else {
return ((BlogPost) obj).getTitle();
爲什麼要圍繞基準obj
和BlogPost
包裹返回的BlogPost
的滴度需要括號行?原因封閉括號類型的投
這在Java中稱爲類型轉換。請參見本鑄造Oracle的Java文檔對象:https://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html
假設obj
引用是不同的類型BlogPost
的,聲明((BlogPost) obj)
不投obj
的類型BlogPost
。如果沒有parenthesises聲明:
(BlogPost) obj.getTitle();
將意味着:投getTitle()
返回值BlogPost
。雖然與parentesises聲明:
((BlogPost) obj).getTitle();
意味着:投obj
的類型BlogPost
,比呼籲BlogPost
類型的實例方法getTitle()
。
這將鑄造obj
作爲BlogPost
並在此上下文中執行getTitle
。
return ((BlogPost) obj).getTitle();
而這將執行getTitle
爲obj
(這可能isn't該類定義),並將把結果爲BlogPost
(這對於String -> BlogPost
也不會轉回去工作)
return (BlogPost) obj.getTitle();
在最終,這是代碼執行順序的決定性因素,以便讓obj
必須具有正確的上下文。
((BlogPost)obj).getTitle(); 會將對象轉換爲blogpost類型,然後調用getTitle()方法。 如果它被寫爲(BlogPost)obj.getTitle(),它將從getTitle()方法獲得返回值,然後將其轉換爲BlogPost()的類型。