Использование универсальных типов Java для преобразования типов - PullRequest
1 голос
/ 30 апреля 2019

У меня есть Object o, который можно привести к типу А и типу Б.

Мне нужна функция transformForType(Type t, Object o), которая принимает тип, скажем, A или B и проверяет, является ли он этим типом, и обрабатывает его для преобразования.
Использование функции будет примерно таким: B result = tranformForType(B.class, o);


Мой вопрос: как определить функцию tranformForType, и если она возможна, то как лучше всего использовать универсальные типы.
С уважением.

Ответы [ 2 ]

4 голосов
/ 30 апреля 2019

Класс Class уже имеет метод для приведения объекта во время выполнения - метод cast :

Приводит объект к представленному классу или интерфейсуэтим Class объектом.

Вам просто нужно вызвать его.Он бросит ClassCastException, как и обычные заклинатели.

B result = B.class.cast(o);
0 голосов
/ 30 апреля 2019

Простой способ будет:

static <T> T transformForType(Class<T>, Object o) { ...

что нет никаких ограничений на этот тип T, но, конечно, если A / B реализует тот же интерфейс или имеет тот же базовый класс, вы можете дополнительно уточнить это T:

static <T extends ABInterface> T transformForType(Class<T>, Object o) { ...

например.

И обратите внимание: очевидно, когда у вас нет ограничений на тот тип, который вы хотите разыграть, вы переходите к другому ответу и звоните SomeClass.class.cast(). Но если вы хотите разрешить только определенные типы, вы можете использовать такой transformForType() метод (который затем будет использовать тот же самый cast() метод)!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...