Как получить статически связанный класс в Java?

Сказать

class E extends B {}
class B extends A {}

У нас есть,

B v = new E();
process(v);

Мы знаем, что это правда,

v.getClass() == E.class

Есть ли способ программно определить статическую привязку для v точно B?

РЕДАКТИРОВАТЬ: первоначальная идея заключалась в том, чтобы иметь однострочную проверку для перегруженных методов. Что-то типа,

   process(A a) {
     // ... code for a.processABC();
     if (a.getStaticBindingClass() == B.class) { // not a subclass of B
        // Additional logic for statical binding case.
         ... 
     }
     // ... code for a.processDEF();
   }

Можно ввести процесс (B b); Однако из процесса (A a) копируется много кода.


person SkyOasis    schedule 14.12.2017    source источник
comment
Это зависит от того, как вы используете v. Это поле?   -  person Daniel Pryden    schedule 14.12.2017
comment
v является локальной переменной в некоторых методах. Почему имеет значение, является v полем или нет?   -  person SkyOasis    schedule 14.12.2017
comment
не могли бы вы дать больше информации о контексте? что ты хочешь делать?   -  person martidis    schedule 14.12.2017
comment
Если это локальная переменная, она может даже не существовать к моменту JIT-компиляции кода: JIT может встроить, выделить в стеке, зарегистрировать и т. д. Вам нужно показать код, который использует v и хочет знать его статический тип.   -  person Daniel Pryden    schedule 14.12.2017
comment
Вопрос: зачем вам это? Это может быть проблема XY.   -  person MC Emperor    schedule 14.12.2017
comment
Отредактировал исходный вопрос. Разница, если возможный дубликат здесь, мне нужен случай точного совпадения и подкласс.   -  person SkyOasis    schedule 17.12.2017
comment
Вам нужно найти шаблон посетителя.   -  person user207421    schedule 17.12.2017