У меня есть следующая проблема:
С учетом литерала типа Guice TypeLiteral<T> template
и класса Class c
, реализующего или расширяющего T
, создайте тип Type t
, который эквивалентен c
с созданием всех переменных типа для совместимости с template
.
Если c
не имеет переменных типа, это легко;c
это рассматриваемый тип.Однако, если c
имеет переменные типа, мне нужно сделать следующее:
- Найти тип в иерархии наследования и реализации
c
, соответствующий необработанному типу T
- Просмотрите структуру параметров типа, найдя любые переменные типа и их соответствующие типы в
template
- . Используйте вспомогательные функции Guice
Types
, чтобы создать тип из c
, созданный с помощьютипы, найденные в (2).
Конечно, есть ошибки, которые могут быть неполными.Если он не может найти подходящее использование всех переменных типа, он потерпит неудачу.Могут быть и другие случаи.Однако, если у меня есть это:
class CS<I> implements S<Map<I,Float>> {
// some stuff
}
и литерал типа TypeLiteral<S<Map<I,Float>>>
, я хочу получить тип, представляющий CS
, полностью инстанцированный для соответствия литералу типа.
Itпохоже, что отражение дает достаточно информации для достижения этой цели, но логика выглядит сложной и подверженной ошибкам.Существует ли существующая библиотека, которая предоставляет эту логику?