Я работаю над системой контроля производительности, которая может внедрять ее подпрограммы в существующую сборку. Для этого я пытаюсь понять, как работает код dalvik.invoke-virtual vs invoke-direct в конструкторах
Вот иллюстрация того, что я пытаюсь выполнить. Входной класс может выглядеть следующим образом:
class MyClass{
public MyClass(__params__){
//initialization code
}
}
Я хочу, чтобы добавить код для класса выглядеть следующим образом:
class MyClass{
public MyClass(__params__){
this(_params__,0);
//tracking and performance initialization code
}
public MyClass(__params__, int init){
//old initialization code
}
}
Что вызывает наибольшее количество ошибок до сих пор является различие между invoke-direct
и invoke-virtual
при вызове один конструктор из другого.
При вызове методов это просто (если метод является приватным, он вызывается с invoke-direct
, в противном случае invoke-virtual
). Это не похоже на конструкторы.
Каковы правила вызова invoke-direct
vs invoke-virtual
при вызове одного конструктора из другого?
К сожалению, моя ошибка. Я исправил код в вопросе –
Я пытаюсь вызвать один конструктор из другого, и упомянутый вами код, вероятно, скомпилируется в Foo(), используя invoke-direct для вызова Foo (int) –
@ArsenZahray: Каково ваше требование? – seahawk