Как переменная метода JAVA с окончательным оформлением должна быть выражена в smali? - PullRequest
0 голосов
/ 02 марта 2020

Например,

public void test (int p1, final List p2,final String p3) {

}

Я заметил, что после метода, скомпилированного в smali, впереди еще одна строка метода

# virtual methods

Что это значит? Значит ли это, что параметр имеет финальный модификатор? Если да, то как express какой параметр является окончательным?

1 Ответ

1 голос
/ 02 марта 2020

"final" для параметров - это чисто java понятие, которое на самом деле не выражено в байт-коде. Однако в спецификации dex это допускается с помощью аннотации MethodParameters . Хотя это необязательный кусок метаданных, и я не уверен, что какие-либо компиляторы действительно добавят эту аннотацию в файл dex.

«Виртуальные методы» не связаны с конечными параметрами. Формат dex определяет 2 категории методов. Виртуальные методы и прямые методы. Прямые методы - это методы, которые не могут быть переопределены подклассом, в то время как виртуальные методы могут быть. частные методы, методы и конструкторы stati c являются прямыми, а все остальное является виртуальным.

...