Реализация класса Лучшая практика? - PullRequest
0 голосов
/ 22 сентября 2018

У меня есть код (Activity.class), в котором я вызываю базовый метод для выполнения.Сейчас я определяю другой класс MyTask extending AsyncTask.Мой вопрос:

a) В некоторых случаях мы объявляем внешний класс в том же Java-файле для примера здесь Activity.java, но вне класса Activity и

b) В некоторых случаях мы объявляем внешний классв том же Java-файле для примера здесь Activity.java, но внутри класса Activity и

c) В некоторых случаях мы объявляем внешний класс в другом Java-файле для примера здесь MyTask.java

Что такоеРазница между этими 3 реализациями в отношении доступности, памяти и лучших практик.Описательный ответ прояснит мою концепцию и приветствуется здесь.

Ответы [ 2 ]

0 голосов
/ 22 сентября 2018

Специальные возможности или область действия

С точки зрения области действия, в первом случае мы определяем несколько классов Java (не вложенных классов) в отдельных файлах.

Java позволяет нам определять несколько классов в одном файле, но с одним ограничением только один класс может быть общедоступным.поэтому только один класс может быть доступен вне его пакета, а все остальные будут частными классами пакета.Однако после компиляции каждый класс будет представлен своим собственным .class файлом, аналогично определению разных файлов.

Во втором случае мы определяем класс Java (MyTask.java) внутри класса Java(Activity.java), это известно как внутренние классы (в нашем случае это вложенный класс).

Доступность вложенного класса также работает как метод класса.доступ к нему возможен вне его пакета, если класс является общедоступным, через объект его включающего класса. Однако, если мы хотим получить доступ к методам вложенного класса, нам нужно создать объект этого класса, такой же, как включающий класс.например new Activity().new MyTask().foo()

В третий случай мы определяем каждый класс как отдельные файлы

доступность будет напрямую зависеть от того, какой модификатор доступа мы определили для класса, если классПубличный, тогда он может быть доступен везде во всем проекте.таким образом, вы получите полный контроль над тем, как вы хотите, чтобы ваш класс имел доступ.

Память

С точки зрения память , нет никакой разницывообще

У класса нет памяти, пока не создан объект класса.так что совершенно неважно, где вы определили свой класс.память будет зависеть от количества созданных объектов.

Однако в случае вложенного класса, если мы обращаемся к вложенному классу за пределами его включающего класса, то сначала нам понадобится объект его включающего класса, чтобы охватывающий класс получал память, даже если мы просто хотим получить доступ к вложенному классу..

но если мы обращаемся внутрь, то во всех случаях согласно правилам память останется прежней

Best Practices

, в этих случаях лучшие практики полностью зависятв случае использования

для в первом случае давайте предположим, что у нас теперь есть два class A и class B и class A extends B, если мы знаем, что никогда не будем использовать class B непосредственно снаружиэто пакет, тогда мы можем определить оба класса в одном и том же файле (не вложенный класс) и сделать class A нашим открытым классом

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

во втором случае , если мы знаем, что класс будет использоваться только один раз, например MyTask.java будет просто использоваться в Activity.java, тогда мы сможем определить его внутри Acitivty.java, используя этот подход, мы будем иметь весь код в одном месте, работающий вместе для функциональности.

наш третий случай может использоваться во многих случаях и, как правило, наиболее часто используемым способом.каждый класс в отдельном файле, поэтому позже к каждому классу можно легко получить доступ

для нашего примера, если мы знаем, что MyTask.java может использоваться более чем одним классом, то мы можем создать его как отдельный файл с открытым доступом.

0 голосов
/ 22 сентября 2018

Важно, где вы планируете реализовать AsyncTask.

Если AsyncTask напрямую связан с целью Activity, например, когда вы пытаетесь получить переменную из класса, то рекомендуется иметь класс AsyncTask в activiy.Однако это случается редко.Здесь вы должны ссылаться на AsyncTask как ActivityName.AsyncTaskName, поэтому не рекомендуется, если asynctask тесно связана с функцией деятельности

Недостаток / преимущество (зависит от обстоятельств использования) размещения AsyncTaskв том же файле, но вне действия, он может быть только закрытым для пакета, то есть доступ ко мне возможен только из этого пакета.

Если вы планируете использовать AsyncTask во многих действиях / классах, вам следуетвозможно поместите его в другой файл Java

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...