Является ли привязка к TypeLiteral хорошей или плохой практикой в ​​google guice?

Google guice использует new TypeLiteral<C<T>>() {}для преодоления тот факт, что мы не можем использовать C<T>.class.

Теперь это общее для следующего:

bind(new TypeLiteral<C<T>>() {}).to(MyCSubclassTypedToT.class);

Однако представьте себе другой сценарий. У нас есть общий интерфейс, который мы хотим внедрить, и реализация, которую мы имеем, обеспечивается универсальным классом.

Guice позволяет вам сделать это следующим образом:

bind(new TypeLiteral<MyGenericInterface<T>>() {}).to(new TypeLiteral<MyGenericClass<T>>() {});

Другой способ сделать это состоит в том, чтобы расширить MyGenericClass следующим образом:

MyTypedClass extends MyGenericClass<T>

и затем связать его следующим образом:

bind(MyGenericInterface<T>>() {}).to(MyTypedClass.class);

Если MyGenericInterface вводится много (, хотя и с разными types ), и каждый раз, когда я его внедряю, я использую MyGenericClass, последний подход приводит к чрезмерно многословному коду. Поэтому я склоняюсь к использованию первого.

Мне было бы очень интересно узнать мнение других людей об использовании TypeLiteral в предложении to привязки guice. Я боюсь, что я мог бы немного зашортить и, таким образом, не вижу ловушек этого подхода.

8
задан velocipedist 7 June 2012 в 19:57
поделиться