<T extends Drawable & DrawerToggle> ActionBarDrawerToggle(
Activity activity,
Toolbar toolbar,
DrawerLayout drawerLayout,
T slider,
@StringRes int openDrawerContentDescRes,
@StringRes int closeDrawerContentDescRes) {
在浏览类ActionBarDrawerToggle.java的源代码时,我发现这个构造函数是在没有访问说明符的情况下声明的。相反,它的声明以
开头<T extends Drawable & DrawerToggle>
请解释,这究竟意味着什么?
答案 0 :(得分:23)
T
是泛型类型声明,然后用作其中一个参数的类型 - slider
。
<T extends Drawable & DrawerToggle >
具体表示T
必须扩展/实施Drawable
和DrawerToggle
类/接口。
访问说明符不是必需的。如果它缺失,则意味着只能从同一个包中的类访问类/方法。
答案 1 :(得分:8)
与普通方法一样,构造函数可以采用类型参数。这在Java语言规范的这一节中提到:
https://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#jls-8.8
根据那里提到的语法,您可以在签名中包含类型参数:
TypeParameters:
&LT;
TypeParameterList
&gt;
TypeParameterList:
TypeParameter {, TypeParameter}
并将TypeParameter指定为
TypeParameter:
{TypeParameterModifier} Identifier [TypeBound]
TypeParameterModifier:
Annotation
TypeBound:
extends
TypeVariable
extends
ClassOrInterfaceType {AdditionalBound}
AdditionalBound:
&
InterfaceType
答案 2 :(得分:3)
此块指定slider
参数类型(slider参数的值必须扩展drawable和drawabletoggle类(或接口))。搜索泛型以获取更多信息。