# TypeVariable

Added in[API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  
Summary:[Methods](https://developer.android.com/reference/java/lang/reflect/TypeVariable#pubmethods)\|[Inherited Methods](https://developer.android.com/reference/java/lang/reflect/TypeVariable#inhmethods)  

# TypeVariable

`
public


interface
TypeVariable
`  
`


implements

`[Type](https://developer.android.com/reference/java/lang/reflect/Type)`


`

|-----------------------------------------------------------------------------------------------------------------------------------------------------------------|
| java.lang.reflect.TypeVariable\<D extends[java.lang.reflect.GenericDeclaration](https://developer.android.com/reference/java/lang/reflect/GenericDeclaration)\> |

<br />

*** ** * ** ***

TypeVariable is the common superinterface for type variables of kinds. A type variable is created the first time it is needed by a reflective method, as specified in this package. If a type variable t is referenced by a type (i.e, class, interface or annotation type) T, and T is declared by the nth enclosing class of T (see JLS 8.1.2), then the creation of t requires the resolution (see JVMS 5) of the ith enclosing class of T, for i = 0 to n, inclusive. Creating a type variable must not cause the creation of its bounds. Repeated creation of a type variable has no effect.

Multiple objects may be instantiated at run-time to represent a given type variable. Even though a type variable is created only once, this does not imply any requirement to cache instances representing the type variable. However, all instances representing a type variable must be equal() to each other. As a consequence, users of type variables must not rely on the identity of instances of classes implementing this interface.

## Summary

|                                                                                                                                                      ### Public methods                                                                                                                                                       ||
|--------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| ` abstract `[Type[]](https://developer.android.com/reference/java/lang/reflect/Type) | ` `[getBounds](https://developer.android.com/reference/java/lang/reflect/TypeVariable#getBounds())`() ` Returns an array of`Type`objects representing the upper bound(s) of this type variable.                                         |
| ` abstract D`                                                                        | ` `[getGenericDeclaration](https://developer.android.com/reference/java/lang/reflect/TypeVariable#getGenericDeclaration())`() ` Returns the`GenericDeclaration`object representing the generic declaration declared this type variable. |
| ` abstract `[String](https://developer.android.com/reference/java/lang/String)       | ` `[getName](https://developer.android.com/reference/java/lang/reflect/TypeVariable#getName())`() ` Returns the name of this type variable, as it occurs in the source code.                                                            |

| ### Inherited methods |
|-----------------------|---|
| From interface` `[java.lang.reflect.Type](https://developer.android.com/reference/java/lang/reflect/Type)` ` |-------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | ` default `[String](https://developer.android.com/reference/java/lang/String) | ` `[getTypeName](https://developer.android.com/reference/java/lang/reflect/Type#getTypeName())`() ` Returns a string describing this type, including information about any type parameters. | ||

## Public methods

### getBounds

Added in[API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  

```
public abstract Type[] getBounds ()
```

Returns an array of`Type`objects representing the upper bound(s) of this type variable. If no upper bound is explicitly declared, the upper bound is`Object`.

For each upper bound B:

- if B is a parameterized type or a type variable, it is created, (see[ParameterizedType](https://developer.android.com/reference/java/lang/reflect/ParameterizedType)for the details of the creation process for parameterized types).
- Otherwise, B is resolved.

<br />

<br />

|                                                                          Returns                                                                          ||
|--------------------------------------------------------------------------|---------------------------------------------------------------------------------|
| [Type[]](https://developer.android.com/reference/java/lang/reflect/Type) | an array of`Type`s representing the upper bound(s) of this type variable <br /> |

|                                                                                                               Throws                                                                                                                ||
|--------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|
| [TypeNotPresentException](https://developer.android.com/reference/java/lang/TypeNotPresentException)                                 | if any of the bounds refers to a non-existent type declaration                                |
| [MalformedParameterizedTypeException](https://developer.android.com/reference/java/lang/reflect/MalformedParameterizedTypeException) | if any of the bounds refer to a parameterized type that cannot be instantiated for any reason |

### getGenericDeclaration

Added in[API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  

```
public abstract D getGenericDeclaration ()
```

Returns the`GenericDeclaration`object representing the generic declaration declared this type variable.

<br />

|                               Returns                                ||
|-----|-----------------------------------------------------------------|
| `D` | the generic declaration declared for this type variable. <br /> |

### getName

Added in[API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  

```
public abstract String getName ()
```

Returns the name of this type variable, as it occurs in the source code.

<br />

|                                                                   Returns                                                                   ||
|--------------------------------------------------------------------|-------------------------------------------------------------------------|
| [String](https://developer.android.com/reference/java/lang/String) | the name of this type variable, as it appears in the source code <br /> |