2017-04-21 79 views
1
if (obj instanceof String) { 
    return (String) obj; 
} else { 
    return ((BlogPost) obj).getTitle(); 

爲什麼要圍繞基準objBlogPost包裹返回的BlogPost的滴度需要括號行?原因封閉括號類型的投

回答

5

假設obj引用是不同的類型BlogPost的,聲明((BlogPost) obj)不投obj的類型BlogPost。如果沒有parenthesises聲明:

(BlogPost) obj.getTitle(); 

將意味着:投getTitle()返回值BlogPost。雖然與parentesises聲明:

((BlogPost) obj).getTitle(); 

意味着:投obj的類型BlogPost,比呼籲BlogPost類型的實例方法getTitle()

1

這將鑄造obj作爲BlogPost並在此上下文中執行getTitle

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

而這將執行getTitleobj(這可能isn't該類定義),並將把結果爲BlogPost(這對於String -> BlogPost也不會轉回去工作)

return (BlogPost) obj.getTitle(); 

在最終,這是代碼執行順序的決定性因素,以便讓obj必須具有正確的上下文。

0

((BlogPost)obj).getTitle(); 會將對象轉換爲blogpost類型,然後調用getTitle()方法。 如果它被寫爲(BlogPost)obj.getTitle(),它將從getTitle()方法獲得返回值,然後將其轉換爲BlogPost()的類型。