Подтвердить что ты не робот

Какой конструктор это, начиная с <T extends Drawable & DrawerToggle>?

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

Пожалуйста, объясните, что это значит?

4b9b3361

Ответ 1

T - это объявление общего типа, которое затем используется как тип для одного из аргументов - slider.

<T extends Drawable & DrawerToggle > означает, что T должен расширять/внедрять классы Drawable и DrawerToggle классов/интерфейсов.

Спецификатор доступа не является обязательным. В случае его отсутствия это означает, что класс/метод доступен только из классов внутри одного пакета.

Ответ 2

Как и обычные методы, конструкторы могут принимать параметры типа. Это упоминается в этом разделе Спецификации языка Java:

https://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#jls-8.8

Из упомянутого там синтаксиса вы можете иметь параметры типа в сигнатуре:

TypeParameters:

< TypeParameterList >

TypeParameterList:

TypeParameter {, TypeParameter}

и где TypeParameter указан как

TypeParameter:

{TypeParameterModifier} Identifier [TypeBound]

TypeParameterModifier:

Annotation

TypeBound:

extends TypeVariable

     

extends ClassOrInterfaceType {AdditionalBound}

AdditionalBound:

& InterfaceType

Ответ 3

Этот блок указывает тип параметров slider (значение параметра ползунка должно расширять классы drawable и drawabletoggle (или интерфейсы)). Поиск дженериков для получения дополнительной информации.