Class Key<T>
- java.lang.Object
-
- com.google.inject.Key<T>
-
public class Key<T> extends java.lang.Object
Binding key consisting of an injection type and an optional annotation. Matches the type and annotation at a point of injection.For example,
Key.get(Service.class, Transactional.class)
will match:@Inject public void setService(@Transactional Service service) { ... }
Key
supports generic types via subclassing just likeTypeLiteral
.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.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description (package private) static class
Key.AnnotationInstanceStrategy
(package private) static interface
Key.AnnotationStrategy
(package private) static class
Key.AnnotationTypeStrategy
(package private) static class
Key.NullAnnotationStrategy
-
Field Summary
Fields Modifier and Type Field Description private Key.AnnotationStrategy
annotationStrategy
private int
hashCode
private java.lang.String
toString
private TypeLiteral<T>
typeLiteral
-
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.(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()
<T> Key<T>
ofType(TypeLiteral<T> type)
Returns a new key of the specified type with the same annotation as this key.<T> Key<T>
ofType(java.lang.Class<T> 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>
withoutAttributes()
Returns this key without annotation attributes, i.e.
-
-
-
Field Detail
-
annotationStrategy
private final Key.AnnotationStrategy annotationStrategy
-
typeLiteral
private final TypeLiteral<T> typeLiteral
-
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.
-
Key
private Key(TypeLiteral<T> typeLiteral, Key.AnnotationStrategy annotationStrategy)
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.
-
getAnnotation
public final java.lang.annotation.Annotation getAnnotation()
Gets the annotation.
-
hasAnnotationType
boolean hasAnnotationType()
-
getAnnotationName
java.lang.String getAnnotationName()
-
getRawType
java.lang.Class<? super T> getRawType()
-
equals
public final boolean equals(java.lang.Object o)
- Overrides:
equals
in classjava.lang.Object
-
hashCode
public final int hashCode()
- Overrides:
hashCode
in classjava.lang.Object
-
toString
public final java.lang.String toString()
- Overrides:
toString
in classjava.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 <T> Key<T> ofType(java.lang.Class<T> 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 <T> Key<T> ofType(TypeLiteral<T> type)
Returns a new key of the specified type with the same annotation as this key.- Since:
- 3.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)
-
-