2013-07-11 22 views
0

在Java中,大多數方法都是虛擬方法。在呼叫站點,可能會根據對象調用不同的實際方法。這是動態調度。如何獲取呼叫站點可能的目標數量?

問題:我們可以靜態獲取呼叫站點的目標數嗎?例如,從字節碼。

FYI:答案爲「virtual method」具有動態調度的一個簡單的例子。

+0

可能的調用目標的數量原則上是無限的,這取決於實現/覆蓋該方法的可用類的數量。 – EJP

+0

出於好奇,你爲什麼對此感興趣呢? – DaoWen

回答

2

在給定的調用點的目標將是每一個類,它是目標類型的子類型。 (我在這裏使用「子類型」作爲「小於或等於」關係,如instanceof)。這意味着你基本上問這個同樣的問題:

How do you find all subclasses of a given class in Java?

答案是,沒有一個簡單的方法來做到這一點。你基本上只需枚舉所有可能的類並測試子類型關係。

如果你真的想要做一些與此靜態分析,你可以建立與所有的類層次結構關係的數據結構,這樣你就可以在大集通話網站做得更快查找。