собеседование

Как происходит наследование если оба реализуемых интерфейса объявляют один и тот же метод?

В том случае, когда объявления полностью идентичны, в класс, реализующий эти интерфейсы определяет требуемый метод. В том случае, если методы возвращают разные типы, тот все зависит от самих типов. Как известно, начиная с 5 версии Java переопределение ковариантно по отношению…

Читать полностью

Как поменять значение приватного finall поля на другое

В первую очередь нужно знать, что такое действие слишком плохая практика, противоречащая принципу сокрытия информации. Для того чтобы это сделать нужно обратиться к Reflection API. Для этого нужно: ·        чтобы получить дескриптор нужного поля, вызываем метод getDeclaredField()…

Читать полностью

Что такое Reflection?

Reflection – это инструмент метапрограммирования, который даёт средства, с помощью которых можно манипулировать данными, зная структуру конкретного класса, к которым эта информация относятся. Class<T> является входом в рефлексию. В экземплярах данного класса содержится информация о требуемом классе. Имеющиеся способы получить…

Читать полностью

В каком случае результатом выполнения Class.getClassLoader будет null?

Чтобы ответить на этот вопрос нужно разобраться в двух темах. Во-первых, экземпляры, относящиеся к Class<T>, являются описанием типов, где считается что перечисления – это классы, а аннотации идентичны интерфейсам. Экземпляры, принадлежащие Class<T> хранят, в основном, ту же информацию, что и…

Читать полностью

Как создаётся экземпляр класса?

На первом этапе загружается сам класс, вместе со своими предками. Класс загружается всего раз, во время 1-го упоминания данного класса. Когда загрузка закончится, начинается процесс выделения памяти под имеющиеся в нём static поля и начинают выполняться команды, прописанные в static…

Читать полностью

Зачем нужен тип enum?

Enum является классом со всеми свойствами финального, у которого имеются поля, объявленные по умолчанию как final и экземпляры, также финальные. Им нельзя расширять классы, но с его помощью можно реализовывать интерфейсы. Перечисление Enum является сравнимым (Comparable) и сериализируемым (Serializable). В…

Читать полностью

Какие модификаторы доступа есть в языке Java?

В Java их четыре: public – отсутствуют ограничения на доступ; protected – предоставляет доступ из классов, входящих в пакет и из всех наследников; private – доступ возможен только из исходного класса и внутренний или вложенных в него классов; pakage-private –…

Читать полностью

Для чего используется модификатор static?

С помощью данного ключевого слова можно объявить static методы, импорты, поля, инициализационные статические блоки, а также вложенные классы. К static полям и методам класса есть обращаются используя имя класса, потому что, поля и методы являются членами класса, в котором прописаны,…

Читать полностью

Что делают загрузчики классов?

В языке Java применяется динамический тип загрузки используемых классов, которую выполняют лоадеры (они же загрузчики). Они происходят от класса ClassLoader, который является абстрактным. Также они отвечают за загрузку прочих файлов, в которых содержаться ресурсы. Загрузка элементов ссылочного типа, в том…

Читать полностью

Атрибут weight и его влияние на производительность

При использовании обычного LinearLayout каждый из on… методов View вызывается его дочерних View только по одному разу, что делает его довольно быстрым. Если же использовать атрибут weight, то метод onMeasure() будет вызван по 2 раза на каждом View. Это делает…

Читать полностью

Для чего нужен атрибут weight в LinearLayout?

Это атрибут, который указывает то, какую часть экрана займет View по сравнению с другими View, у которых тоже указан данный атрибут. При этом в зависимости от атрибута orientation, данный атрибут будет влиять на разные параметры View. Если у LinearLayout стоит…

Читать полностью

Назовите отличия CoordinatorLayout от FrameLayout

CoordinatorLayout можно представить как FrameLayout на максималках. Это улучшенная версия FrameLayout. CoordinatorLayout рассчитан на использование в двух основных случаях В качестве top-level декора приложения или же chrome layout Когда необходимо настроить взаимодействие между layout и его дочерними view либо между…

Читать полностью

Какие вы знаете layout в Android?

Из основных лэйаутов (прямых наследников ViewGroup) можно выделить следующие FrameLayout. Отрисовывает элементы друг поверх друга. LinearLayout Отрисовывает элементы друг за другом. У данного layout есть атрибут orientation, который задает направление, в котором будут отрисовываться дочерние View. Если данный атрибут имеет…

Читать полностью

Расскажите про ViewGroup и View и в чем их различие?

ViewGroup – это класс, который наследуется от View. Он расширяет View и позволяет хранить в себе другие View, по сути это как контейнер. Все layout’ы являются ViewGroup. Так же этот класс будет базовым и для layout parameters. ViewGroup предоставляет невидимый…

Читать полностью

Расскажите про Database View в Room

Начиная с версии 2.1.0 Room поддерживает SQLite database views. Database Views позволяют инкапсулировать запрос в БД внутри класса. Такие классы представляют из себя простенькие объекты с данными. Чтобы создать такой класс необходимо добавить аннотацию @DatabaseView к классу, а в качестве…

Читать полностью

Можно ли ViewModel заменить onSaveInstanceState()?

Не совсем. Вернее не всегда вьюмоделью можно заменить onSaveInstanceState(). Рассмотри такой случай, когда в нашей активити есть ViewModel, которая сохраняет наши данные. Так же эти же данные сохраняются в onSaveInstanceState(). Всего есть три варианта как будет создаваться активити: Активити запускается…

Читать полностью

Объединение нескольких LiveData в Android

Для того, чтобы объединить несколько LiveData необходимо использовать класс MediatorLiveData. Данный класс умеет подписываться на обновления других LiveData. Для этого необходимо вызвать метод MediatorLiveData.addSource(). Он принимает в себя два аргумента: 1) Сама LiveData, на которую нужно подписаться 2) Observer, который…

Читать полностью

Особенности при подписке на LiveData во Fragment

Метод observe() класса LiveData принимает в качестве аргумента объект класса LifecycleOwner. Данный объект будет указывать, кто является владельцем данного Lifecycle, это необходимо чтобы колбек LifeData.observe() не триггерился когда LifecycleOwner еще не в активном состоянии (либо уже был вызван onDestory(), либо…

Читать полностью

Паттерн MVVM

MVVM, — шаблон проектирования архитектуры приложений. Он упрощает разделение разработки графического интерфейса (view) от разработки бизнесс-логики (model). ViewModel в данном шаблоне проектирования является промежуточным звеном, которое помогает преобразовывать данные таким образом, чтобы их было легко представлять и ими было легко…

Читать полностью