java - seis - ¿Qué tipo de constructor es este, comenzando con<T extiende Drawable & DrawerToggle>?
palabras de 6 letras que empiecen con t (3)
Al igual que los métodos normales, los constructores pueden tomar parámetros de tipo. Esto se menciona en esta sección de la especificación del lenguaje Java:
https://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#jls-8.8
A partir de la sintaxis mencionada allí, puede tener parámetros de tipo en la firma:
TypeParameters:
<
TypeParameterList
>
TypeParameterList:
TypeParameter {, TypeParameter}
y donde TypeParameter se especifica como
TypeParameter:
{TypeParameterModifier} Identifier [TypeBound]
TypeParameterModifier:
Annotation
TypeBound:
extends
TypeVariable
extends
ClassOrInterfaceType {AdditionalBound}
AdditionalBound:
&
InterfaceType
Esta pregunta ya tiene una respuesta aquí:
- Java Generics Wildcarding With Multiple Classes 2 respuestas
<T extends Drawable & DrawerToggle> ActionBarDrawerToggle(
Activity activity,
Toolbar toolbar,
DrawerLayout drawerLayout,
T slider,
@StringRes int openDrawerContentDescRes,
@StringRes int closeDrawerContentDescRes) {
Durante la exploración del código fuente de la clase ActionBarDrawerToggle.java , he encontrado que este constructor está declarado sin especificador de acceso. Más bien, su declaración comienza con
<T extends Drawable & DrawerToggle>
Por favor explique, ¿qué significa realmente?
Este bloque especifica el tipo de parámetros del slider
(el valor del parámetro del control deslizante debe extender las clases (o interfaces) drawable y drawabletoggle). Buscar genéricos para más información.
T
es una declaración de tipo genérico que luego se usa como tipo para uno de los argumentos: slider
.
<T extends Drawable & DrawerToggle >
significa específicamente que T
debe extender / implementar las clases / interfaces Drawable
y DrawerToggle
.
El especificador de acceso no es obligatorio. En caso de que falte, significa que la clase / método es accesible solo desde clases dentro del mismo paquete.