这是什么类型的构造函数,从<t extends =“”drawable =“”&=“”drawertoggle =“”>开始?

时间:2016-02-05 11:15:17

标签: java android constructor

<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>

请解释,这究竟意味着什么?

3 个答案:

答案 0 :(得分:23)

T是泛型类型声明,然后用作其中一个参数的类型 - slider

<T extends Drawable & DrawerToggle >具体表示T必须扩展/实施DrawableDrawerToggle类/接口。

访问说明符不是必需的。如果它缺失,则意味着只能从同一个包中的类访问类/方法。

答案 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类(或接口))。搜索泛型以获取更多信息。