Простой способ будет:
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()
метод)!