- Строго необходимо создавать каждый раз каждый раз, просто обычно это удобнее, чем хранить экземпляр
TypeLiteral
как константу и использовать его. - You 'создает анонимный подкласс
TypeLiteral<Box<String>>
.При этом конкретные аргументы универсального типа фиксируются для всего класса , который вы создаете, и поэтому доступны во время выполнения. - Поскольку в противном случае было бы невозможно провести различие между
Box<String>
привязка и другая Box<Integer>
привязка.
Кстати, для приведенного вами примера, я думаю, вам нужно написать:
bind(new TypeLiteral<Box<String>>(){}).to(new TypeLiteral<BoxImpl<String>>(){});
(Если только BoxImpl
по какой-то причине реализует Box<String>
, а не Box<T>
.)