core/src/com/google/inject/internal/RealMapBinder.java
@SuppressWarnings("unchecked")
  private static <T> Key<Provider<T>> getKeyOfProvider(Key<T> valueKey) {
    return (Key<Provider<T>>)
        valueKey.ofType(Types.providerOf(valueKey.getTypeLiteral().getType()));
  }
@SuppressWarnings("unchecked")
  private static <T> Key<Provider<T>> getKeyOfProvider(Key<T> valueKey) {
    return (Key<Provider<T>>)
        valueKey.ofType(Types.providerOf(valueKey.getTypeLiteral().getType()));
  }
@ SuppressWarnings ( "unchecked" ) private static < T > Key < Provider < T > > getKeyOfProvider ( Key < T > valueKey ) { return ( Key < Provider < T > > ) valueKey . ofType ( Types . providerOf ( valueKey . getTypeLiteral ( ) . getType ( ) ) ) ; }
Given a Key<T> will return a Key<Provider<T>>
Given a Key<T > will return a Key<Provider<T >>