Динмически приведите объект, используя отражение - PullRequest
0 голосов
/ 26 августа 2018

Может кто-нибудь объяснить, почему этот код не работает, и выдать ошибку: несовместимый тип: объект не может быть преобразован в aaa

class aaa {}

class bbb extends aaa {

}

class psp {

 public static void main(String args[]) {

        bbb b = new bbb();

        Object object = b;
        Class clazz = aaa.class;
       //aaa a=clazz.cast(b); doesnot work
      //aaa a=Class.forName("aaa").cast(object); doesnt work
     //aaa a=Class.forName("aaa").cast(b);doesnt work
        aaa a = (aaa) object;
        a = (aaa) aa;
        a = aaa.class.cast(b);

 }
}

PS: я говорю о закомментированном коде

1 Ответ

0 голосов
/ 26 августа 2018

Есть 2 проблемы, которые легко исправить:

Объявите clazz как Class<aaa>, чтобы исключить необходимость приведения clazz.cast(b) к aaa:

Class<aaa> clazz = aaa.class;

aaa a = clazz.cast(b); //works

Class.forName возвращает Class<?>, поэтому вам нужно явно привести:

aaa a1 = (aaa) Class.forName("aaa").cast(object);
aaa a2 = (aaa) Class.forName("aaa").cast(b);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...