2015-05-11 3 views
0

Я пишу приложение для Android, которое использует AdapterView. В классе AdapterView есть несколько вызовов IsInFilterMode(), которые просто являются одной строкой, которая возвращает false. Я не могу переопределить функцию, поэтому я не могу понять, почему эта функция существует, если она возвращает false. В описании говорится, что он возвращает true, если он находится в режиме фильтра. Вот определение IsInFilterMode():Зачем возвращать false в Java?

/** 
* Indicates whether this view is in filter mode. Filter mode can for instance 
* be enabled by a user when typing on the keyboard. 
* 
* @return True if the view is in filter mode, false otherwise. 
*/ 
boolean isInFilterMode() { 
    return false; 
} 

Я относительно новое для Java поэтому, возможно, я пропускаю что-то, что является типичным для Java исходного кода здесь? Есть ли другой код, который был бы запутан от меня?

+4

Почему вы не можете переопределить метод? Класс отмечен как окончательный? Похоже на значение по умолчанию, которое вы ожидаете переопределить при расширении этого класса. – duffymo

+4

Значение возвращаемого значения по умолчанию - «false», но пользовательские реализации (дочерние элементы «AdapterView») могут переопределять 'isInFilterMode()' в соответствии с их возможностями. По умолчанию «AdapterView» просто не поддерживает режим фильтрации. – GiantTree

+0

А, возможно, я был нобом. Android Studio пометила мое переопределение как не переопределяющее что-либо из суперкласса. Я пытался переопределить его из ArrayAdapter, а не из AdapterView. Виноват! Неудивительно, почему я не нашел ничего в Google. Ранним утром в понедельник мой мозг не работает. Спасибо за помощь! – LukeP

ответ

3

Во-первых, отсутствие модификатора видимости часто называют package-private. Он находится между protected и private по шкале видимости. Только другие классы внутри одного пакета могут переопределять частные методы. См. Controlling Access to members of a Class для получения дополнительной информации.

Андроид-фреймворк использует это часто - он позволяет фреймворку переопределять эти методы, не позволяя конечным пользователям (разработчикам Android) делать то же самое и потенциально мешать работе фреймворка.

В этом случае по умолчанию для AdapterView s не поддерживается режим фильтрации вообще.

Некоторые подклассы AdapterView поддерживают его. Например, AbsListView и его потомки. В случае AbsListView этот метод возвращает значение внутреннего свойства, которое отслеживает, действительно ли список находится в режиме фильтра.

Смежные вопросы