Class Key<T>


  • public class Key<T>
    extends java.lang.Object
    Guice uses Key objects to identify a dependency that can be resolved by the Guice Injector. A Guice key consists of an injection type and an optional annotation.

    For example, Key.get(Service.class, Transactional.class) will match:

       @Inject
       public void setService(@Transactional Service service) {
         ...
       }
     

    Key supports generic types via subclassing just like TypeLiteral.

    Keys do not differentiate between primitive types (int, char, etc.) and their corresponding wrapper types (Integer, Character, etc.). Primitive types will be replaced with their wrapper types when keys are created.

    • Constructor Summary

      Constructors 
      Modifier Constructor Description
      protected Key()
      Constructs a new key.
      private Key​(TypeLiteral<T> typeLiteral, Key.AnnotationStrategy annotationStrategy)
      Constructs a key from a manually specified type.
      protected Key​(java.lang.annotation.Annotation annotation)
      Constructs a new key.
      protected Key​(java.lang.Class<? extends java.lang.annotation.Annotation> annotationType)
      Constructs a new key.
      private Key​(java.lang.reflect.Type type, Key.AnnotationStrategy annotationStrategy)
      Unsafe.
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      private int computeHashCode()
      Computes the hash code for this key.
      private static void ensureIsBindingAnnotation​(java.lang.Class<? extends java.lang.annotation.Annotation> annotationType)  
      private static void ensureRetainedAtRuntime​(java.lang.Class<? extends java.lang.annotation.Annotation> annotationType)  
      boolean equals​(java.lang.Object o)  
      static <T> Key<T> get​(TypeLiteral<T> typeLiteral)
      Gets a key for an injection type.
      static <T> Key<T> get​(TypeLiteral<T> typeLiteral, java.lang.annotation.Annotation annotation)
      Gets a key for an injection type and an annotation.
      static <T> Key<T> get​(TypeLiteral<T> typeLiteral, java.lang.Class<? extends java.lang.annotation.Annotation> annotationType)
      Gets a key for an injection type and an annotation type.
      static <T> Key<T> get​(java.lang.Class<T> type)
      Gets a key for an injection type.
      (package private) static <T> Key<T> get​(java.lang.Class<T> type, Key.AnnotationStrategy annotationStrategy)
      Gets a key for an injection type and an annotation strategy.
      static <T> Key<T> get​(java.lang.Class<T> type, java.lang.annotation.Annotation annotation)
      Gets a key for an injection type and an annotation.
      static <T> Key<T> get​(java.lang.Class<T> type, java.lang.Class<? extends java.lang.annotation.Annotation> annotationType)
      Gets a key for an injection type and an annotation type.
      static Key<?> get​(java.lang.reflect.Type type)
      Gets a key for an injection type.
      static Key<?> get​(java.lang.reflect.Type type, java.lang.annotation.Annotation annotation)
      Gets a key for an injection type and an annotation.
      static Key<?> get​(java.lang.reflect.Type type, java.lang.Class<? extends java.lang.annotation.Annotation> annotationType)
      Gets a key for an injection type and an annotation type.
      java.lang.annotation.Annotation getAnnotation()
      Gets the annotation instance if available.
      (package private) java.lang.String getAnnotationName()  
      java.lang.Class<? extends java.lang.annotation.Annotation> getAnnotationType()
      Gets the annotation type.
      (package private) java.lang.Class<? super T> getRawType()  
      TypeLiteral<T> getTypeLiteral()
      Gets the key type.
      (package private) boolean hasAnnotationType()  
      boolean hasAttributes()
      Returns true if this key has annotation attributes.
      int hashCode()  
      <U> Key<U> ofType​(TypeLiteral<U> type)
      Returns a new key of the specified type with the same annotation as this key.
      <U> Key<U> ofType​(java.lang.Class<U> type)
      Returns a new key of the specified type with the same annotation as this key.
      Key<?> ofType​(java.lang.reflect.Type type)
      Returns a new key of the specified type with the same annotation as this key.
      (package private) Key<Provider<T>> providerKey()
      Gets the key of this key's provider.
      (package private) static Key.AnnotationStrategy strategyFor​(java.lang.annotation.Annotation annotation)
      Gets the strategy for an annotation.
      (package private) static Key.AnnotationStrategy strategyFor​(java.lang.Class<? extends java.lang.annotation.Annotation> annotationType)
      Gets the strategy for an annotation type.
      java.lang.String toString()  
      Key<T> withAnnotation​(java.lang.annotation.Annotation annotation)
      Returns a new key of the same type with the specified annotation.
      Key<T> withAnnotation​(java.lang.Class<? extends java.lang.annotation.Annotation> annotationType)
      Returns a new key of the same type with the specified annotation.
      Key<T> withoutAttributes()
      Returns this key without annotation attributes, i.e.
      • Methods inherited from class java.lang.Object

        clone, finalize, getClass, notify, notifyAll, wait, wait, wait
    • Field Detail

      • hashCode

        private final int hashCode
      • toString

        private java.lang.String toString
    • Constructor Detail

      • Key

        protected Key​(java.lang.Class<? extends java.lang.annotation.Annotation> annotationType)
        Constructs a new key. Derives the type from this class's type parameter.

        Clients create an empty anonymous subclass. Doing so embeds the type parameter in the anonymous class's type hierarchy so we can reconstitute it at runtime despite erasure.

        Example usage for a binding of type Foo annotated with @Bar:

        new Key<Foo>(Bar.class) {}.

      • Key

        protected Key​(java.lang.annotation.Annotation annotation)
        Constructs a new key. Derives the type from this class's type parameter.

        Clients create an empty anonymous subclass. Doing so embeds the type parameter in the anonymous class's type hierarchy so we can reconstitute it at runtime despite erasure.

        Example usage for a binding of type Foo annotated with @Bar:

        new Key<Foo>(new Bar()) {}.

      • Key

        protected Key()
        Constructs a new key. Derives the type from this class's type parameter.

        Clients create an empty anonymous subclass. Doing so embeds the type parameter in the anonymous class's type hierarchy so we can reconstitute it at runtime despite erasure.

        Example usage for a binding of type Foo:

        new Key<Foo>() {}.

      • Key

        private Key​(java.lang.reflect.Type type,
                    Key.AnnotationStrategy annotationStrategy)
        Unsafe. Constructs a key from a manually specified type.
    • Method Detail

      • computeHashCode

        private int computeHashCode()
        Computes the hash code for this key.
      • getTypeLiteral

        public final TypeLiteral<T> getTypeLiteral()
        Gets the key type.
      • getAnnotationType

        public final java.lang.Class<? extends java.lang.annotation.Annotation> getAnnotationType()
        Gets the annotation type. Will be null if this key lacks an annotation.
      • getAnnotation

        public final java.lang.annotation.Annotation getAnnotation()
        Gets the annotation instance if available. Will be null if this key lacks an annotation or the key was constructed with a Class<Annotation>.

        Warning: this can return null even if this key is annotated. To check whether a Key has an annotation use hasAnnotationType() instead.

      • hasAnnotationType

        boolean hasAnnotationType()
      • getAnnotationName

        java.lang.String getAnnotationName()
      • getRawType

        java.lang.Class<? super T> getRawType()
      • providerKey

        Key<Provider<T>> providerKey()
        Gets the key of this key's provider.
      • equals

        public final boolean equals​(java.lang.Object o)
        Overrides:
        equals in class java.lang.Object
      • hashCode

        public final int hashCode()
        Overrides:
        hashCode in class java.lang.Object
      • toString

        public final java.lang.String toString()
        Overrides:
        toString in class java.lang.Object
      • get

        static <T> Key<T> get​(java.lang.Class<T> type,
                              Key.AnnotationStrategy annotationStrategy)
        Gets a key for an injection type and an annotation strategy.
      • get

        public static <T> Key<T> get​(java.lang.Class<T> type)
        Gets a key for an injection type.
      • get

        public static <T> Key<T> get​(java.lang.Class<T> type,
                                     java.lang.Class<? extends java.lang.annotation.Annotation> annotationType)
        Gets a key for an injection type and an annotation type.
      • get

        public static <T> Key<T> get​(java.lang.Class<T> type,
                                     java.lang.annotation.Annotation annotation)
        Gets a key for an injection type and an annotation.
      • get

        public static Key<?> get​(java.lang.reflect.Type type)
        Gets a key for an injection type.
      • get

        public static Key<?> get​(java.lang.reflect.Type type,
                                 java.lang.Class<? extends java.lang.annotation.Annotation> annotationType)
        Gets a key for an injection type and an annotation type.
      • get

        public static Key<?> get​(java.lang.reflect.Type type,
                                 java.lang.annotation.Annotation annotation)
        Gets a key for an injection type and an annotation.
      • get

        public static <T> Key<T> get​(TypeLiteral<T> typeLiteral)
        Gets a key for an injection type.
      • get

        public static <T> Key<T> get​(TypeLiteral<T> typeLiteral,
                                     java.lang.Class<? extends java.lang.annotation.Annotation> annotationType)
        Gets a key for an injection type and an annotation type.
      • get

        public static <T> Key<T> get​(TypeLiteral<T> typeLiteral,
                                     java.lang.annotation.Annotation annotation)
        Gets a key for an injection type and an annotation.
      • ofType

        public <U> Key<U> ofType​(java.lang.Class<U> type)
        Returns a new key of the specified type with the same annotation as this key.
        Since:
        3.0
      • ofType

        public Key<?> ofType​(java.lang.reflect.Type type)
        Returns a new key of the specified type with the same annotation as this key.
        Since:
        3.0
      • ofType

        public <U> Key<U> ofType​(TypeLiteral<U> type)
        Returns a new key of the specified type with the same annotation as this key.
        Since:
        3.0
      • withAnnotation

        public Key<T> withAnnotation​(java.lang.Class<? extends java.lang.annotation.Annotation> annotationType)
        Returns a new key of the same type with the specified annotation.

        This is equivalent to Key.get(key.getTypeLiteral(), annotation) but may be more convenient to use in certain cases.

        Since:
        5.0
      • withAnnotation

        public Key<T> withAnnotation​(java.lang.annotation.Annotation annotation)
        Returns a new key of the same type with the specified annotation.

        This is equivalent to Key.get(key.getTypeLiteral(), annotation) but may be more convenient to use in certain cases.

        Since:
        5.0
      • hasAttributes

        public boolean hasAttributes()
        Returns true if this key has annotation attributes.
        Since:
        3.0
      • withoutAttributes

        public Key<T> withoutAttributes()
        Returns this key without annotation attributes, i.e. with only the annotation type.
        Since:
        3.0
      • strategyFor

        static Key.AnnotationStrategy strategyFor​(java.lang.annotation.Annotation annotation)
        Gets the strategy for an annotation.
      • strategyFor

        static Key.AnnotationStrategy strategyFor​(java.lang.Class<? extends java.lang.annotation.Annotation> annotationType)
        Gets the strategy for an annotation type.
      • ensureRetainedAtRuntime

        private static void ensureRetainedAtRuntime​(java.lang.Class<? extends java.lang.annotation.Annotation> annotationType)
      • ensureIsBindingAnnotation

        private static void ensureIsBindingAnnotation​(java.lang.Class<? extends java.lang.annotation.Annotation> annotationType)