Использование super (); В Java

package com.example.mapdemo; import android.app.ListActivity; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.support.v4.app.FragmentActivity; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.ListAdapter; import android.widget.ListView; import com.example.mapdemo.view.FeatureView; /** * The main activity of the API library demo gallery. * <p> * The main layout lists the demonstrated features, with buttons to launch them. */ public final class MainActivity extends ListActivity { /** * A simple POJO that holds the details about the demo that are used by the List Adapter. */ private static class DemoDetails { /** * The resource id of the title of the demo. */ private final int titleId; /** * The resources id of the description of the demo. */ private final int descriptionId; /** * The demo activity's class. */ private final Class<? extends FragmentActivity> activityClass; public DemoDetails( int titleId, int descriptionId, Class<? extends FragmentActivity> activityClass) { super(); this.titleId = titleId; this.descriptionId = descriptionId; this.activityClass = activityClass; } } 

Есть две вещи, которые я нахожу, мне нужно лучше понять, когда дело доходит до этого кода. Сначала я пытаюсь определить точный смысл:

 private final Class<? extends FragmentActivity> activityClass; 

Во-вторых, мне любопытно, что называется super (); Поскольку, когда DemoDetails определен, он определяется с помощью:

 private static class DemoDetails { 

Итак, в этот момент нет расширений, так что на что ссылается супер? Использование

 <? extends > 

Я никогда раньше не видел.

Заранее спасибо…

     private final Class<? extends FragmentActivity> activityClass; 

    Это объявляет поле с именем activityClass которое является private (видимо только внутри класса, где оно объявлено), и final (без повторного подсчета). Это тип Class<? extends FragmentActivity> Class<? extends FragmentActivity> (который является параметризованным типом или (type-) экземпляром родового типа Class<T> , где T является параметром типа). Когда используются общие типы, они называются параметризованным типом и предоставляют аргумент типа для параметра типа. Здесь аргумент типа ? extends FragmentActivity ? extends FragmentActivity (на самом деле это подстановочный знак с верхней границей , а верхняя граница здесь – FragmentActivity .

    Это означает, что activityClass может ссылаться на экземпляр Class который представляет собой сам класс FragmentActivity или любой из его подклассов (например, FragmentActivity.class ).

    Private – это означает, что эта переменная не может быть доступна за пределами этого класса final – как только значение назначено, оно не может быть изменено.

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

    Супер-каждый класс расширяет Object. Только объект не имеет родителя в иерархии. Поэтому super () вызывает Object (). Это не нужно, возможно, либо добавлено кем-то, кто этого не знал, либо классом, используемым для родителя, и был рефакторингом, но эта строка была пропущена.

    <? Extends FragmentActivity> <? Extends FragmentActivity> – это означает, что класс является общим. Некоторые из его функций могут работать с большим набором объектов, и мы укажем, что при создании экземпляра класса. На данный момент это?. Часть Extends FragmentActivity означает, что только классы, которые расширяют FragmentActivity, являются допустимыми значениями?. Очевидный вопрос заключается в том, почему бы просто не сделать FragmentActivity? Использование generic ограничивает все? Быть тем же самым типом, тогда как взятие базового класса может позволить им быть смешанными типами? Более конкретно.

    EDIT: первоначально пропустил капитал и поставил значение final для классов, а не классов. Исправлена.

    Чтобы понять утверждение

     private final Class<? extends FragmentActivity> activityClass; 

    И соответствующий параметр конструктора, помните, что Object имеет метод getClass() :

     public final Class<?> getClass(); 

    Кроме того, если у вас есть именованный тип (без анонимного подкласса), вы можете использовать .class :

     String s = "a string"; assert s.getClass().equals(String.class); // String.class is a Class<String> object. 

    Существует несколько мест, где вы используете этот механизм. Отражение – одно, хотя и редкое. Log4J loggers – другое.

    Самый безопасный способ объявить класс произвольного объекта:

     Thing t = ...; // assume not null. Class<? extends Thing> clazz = t.getClass(); 

    В конце концов, t может быть экземпляром подкласса Thing и, возможно, анонимным подклассом. Это выражение означает, что clazz – это объект Class , а конкретная переменная типа clazz – это некоторый, не обязательно известный подкласс Thing , или, может быть, просто Thing .

    Возвращаясь к исходному выражению, activityClass является объектом класса для FragmentActivity или некоторого подтипа. И программа может построить экземпляр его с Class.newInstance() если он имеет конструктор с 0 аргументами.

     private final Class activityClass; 

    Остановит другие классы от расширения вашего класса. Вы также можете сделать это с помощью методов, чтобы ваши методы не были переопределены. http://docs.oracle.com/javase/tutorial/java/IandI/final.html предоставляет дополнительную информацию

     super(); 

    Вызовите конструктор родителя (в этом случае вы расширены ListActivity) http://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html

    Хорошо, давайте займемся этим:

     private final Class<? extends FragmentActivity> activityClass; 

    Класс DemoDetails принимает класс как аргумент конструктора. Этот класс должен иметь тип FragmentActivity или его подкласс. Существует несколько способов использования ссылки на Class, но вы можете создавать новые экземпляры с помощью activityClass.newInstance () . Другим является выполнение проверок времени выполнения с использованием isAssignableFrom ()

    Во-вторых, мне любопытно, что называется супер ()

    Это не имеет никакого эффекта. В суперклассе (Object) ничего не происходит, но всегда рекомендуется называть super (). Особенно, если вы на более позднем этапе решили позволить DemoDetails наследовать что-то еще.

      private final Class<? extends FragmentActivity> activityClass; 

    Смысл этой строки – ActivityClass является частным и окончательным, который может содержать контрольную переменную FragmentActivity или всего подкласса FragmentActivity.

     super(); 

    Это вызовет конструктор суперкласса, то есть ListActivity.If вы не будете писать этот код, компилятор автоматически добавит этот код в файл .class.

      <? extends temp> 

    В этом контейнере этот контейнер может содержать ссылочную переменную temp или подкласс времени temp. Если кто-то пытается передать другой ref.var, возникает ошибка времени компиляции. Таким образом, это в основном ограничение типа ссылочной переменной на держать.

    Вопрос 1. Нет расширений, так что на что ссылается супер?

    Ans: – Каждый класс является подклассом класса Object в java по умолчанию. Свойственный конструктор классов класса Object сначала вызывается, а затем – подкласс.

    Вопрос 2.private final Class activity Значение класса?

    Ans: – Класс, объявленный окончательным, не может быть подклассом .private класс – это класс, к которому можно получить доступ в том же файле класса, а не другим файлом класса в том же или другом пакете.

    Что это такое <? extends > <? extends >

    Ans-это реализация обобщения в java.same как шаблон в c ++.

    Intereting Posts
    Недействить все маркеры gcm Как использовать OpenStreetMap в разработке собственных приложений для Android Есть ли функция в Android, аналогичная функции «int main» в C / C ++, которая содержит основной цикл программы? Простое извлечение текста в формате PDF на Android? Ссылки на страницы Facebook и Twitter приложений Как вы используете .so Общая библиотека в Java Studio Studio Project Важный DONT для хорошего дизайна приложений для Android (уровень начального / начального уровня)? Java.lang.NullPointerException в GoogleApiActivity Использование gestureoverlayview с проблемой scrollview Какое исключение вызывает потеря интернет-соединения при получении данных с сервера? Показывать оповещение в Android каждые пять минут Может ли пользователь отказаться от значения в счетчике? Как выйти из полного экрана Immersive? Аутентификация SSL-клиента с сертификатом на Android Android NDK не может отладить собственный код с двумя плагинами градиента