Как узнать количество возможных целей на сайте вызова?

В Java большинство методов являются виртуальными. На сайте вызова могут быть вызваны различные фактические методы в зависимости от объектов. Это динамическая отправка.

Вопрос: Можем ли мы получить количество целей для сайта вызова статически? Например, из байт-кодов.

К вашему сведению: ответ на " виртуальный метод" имеет простой пример динамической отправки.

1 ответ

Целями на данном сайте вызова будут все классы, которые являются подтипом типа цели. (Я использую "подтип" здесь как отношение "меньше или равно", как instanceof). Это означает, что вы по сути задаете этот же вопрос:

Как вы находите все подклассы данного класса в Java?

Ответ в том, что не существует простого способа сделать это. Вам просто нужно перечислить все возможные классы и проверить отношения подтипов.

Если вы действительно хотите провести какой-то статический анализ с этим, вы можете создать структуры данных со всеми отношениями иерархии классов, чтобы вы могли быстрее выполнять поиск по большому набору сайтов вызовов.

Другие вопросы по тегам