(Примечание: этот ответ был написан до того, как вопрос был полностью изменен. Сейчас я оставляю его таким, как есть, в надежде, что вопрос будет отменен.)
Формально инструкцияB0 tmp_b0 = (B0) AnyB;
правильно,
Хорошо, это допустимый код Java, но я не ожидаю, что он будет работать в этом случае.В настоящее время вы передаете ссылку Field
- это , а не a B0
, поэтому вы получаете исключение.
Вы не хотите передавать сам Field
- Я подозреваю, что вы хотите передать значение поля относительно a
:
Object fieldValue = f[i].get(a);
String p2 = a.GetB(fieldValue);
Даже тогда вы все же получите ClassCastException
для поля b1
, потому что оно имеет тип времени выполнения B1
, но вы пытаетесь привести к B0
.Экземпляр B1
это , а не экземпляр B0
.
Не очень понятно, чего вы здесь добиваетесь - почему у вас вообще есть класс B0
когда вы никогда не создаете его экземпляр - но я бы предложил сначала попытаться заставить все работать без отражения, а затем, когда вы do используете отражение, проведите различие между концепцией поля(как представлено Field
) и значением поля.
(Я бы также предложил не столько использовать вложенные классы, а следовать соглашениям об именах Java, но они несколько различны.)