Intereting Posts
Android ContentProvider вызывает всплески setNotificationUri () в CursorAdapter, когда много строк вставляются с пакетной операцией Установите громкость на максимум в Android Как нажать на кнопку, которая индексируется в 10 позиции в ListView – автоматизация Robotium? Android Wi-Fi Direct Network Как подать виджет DatePicker с другими календарными системами? Запретить перехватывать ссылки Listview при использовании его Child MapView Подпапки в папке с выделенными ресурсами? Выберите несколько файлов с помощью Intent.ACTION_GET_CONTENT Использование Simple XML и получение NoClassDefFoundError в Android Общий метод не распознает общий тип при передаче его в качестве параметра Есть ли репо, где вы можете скачать виртуальные устройства Android? Менеджер учетных записей Android не кэширует authToken OpenGL прозрачные изображения имеют черный цвет ClassNotFoundException: не нашел класс "android.support.design.R $ styleable" Как узнать имя оператора на Android

Понимание класса <?>

Я натолкнулся на этот код:

public class RestfulAdage extends Application { @Override public Set<Class<?>> getClasses() { Set<Class<?>> set = new HashSet<Class<?>>(); set.add(Adages.class); return set; } } 

Я не понимаю, что означает Class<?> .

Class<?> Относится к классу неизвестного типа. В нотации используется неограниченный родовой файл, который не ограничивает тип класса, который может быть добавлен в коллекцию. Например, следующее не будет работать

 Set<Class<String>> set = new HashSet<Class<String>>(); set.add(Adages.class); // type not allowed 

Класс является параметризуемым классом, поэтому вы можете использовать синтаксис Class, где T – тип. При написании класса вы объявляете объект класса, который может быть любого типа (? Является подстановочным знаком). Тип класса – это тип, содержащий метаинформацию о классе.

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

Ссылка на универсальные и подстановочные знаки: http://docs.oracle.com/javase/tutorial/java/generics/wildcards.html

Ссылка на объект класса и отражение (особенность языка Java, используемого для самоанализа): http://java.sun.com/developer/technicalArticles/ALT/Reflection/

В общем коде знак вопроса (?), Называемый подстановочным знаком, представляет собой неизвестный тип. Подстановочный знак можно использовать в различных ситуациях: как тип параметра, поля или локальной переменной; Иногда как возвращаемый тип (хотя это более конкретная практика программирования). Подстановочный знак никогда не используется в качестве аргумента типа для общего вызова метода, создания экземпляра универсального класса или супертипа.

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

Для получения дополнительной информации нажмите здесь

Это относится к герикам. Я предлагаю вам немного почитать. В принципе, вы знаете только во время выполнения, с каким типом объекта вы работаете. Например, Class может быть Integer, String или даже YourDefinedClassType
Читайте здесь http://java.sun.com/developer/technicalArticles/J2SE/generics/

От: Подстановочные знаки

В общем коде знак вопроса (?), Называемый подстановочным знаком, представляет собой неизвестный тип. Подстановочный знак можно использовать в различных ситуациях: как тип параметра, поля или локальной переменной; Иногда как возвращаемый тип (хотя это более конкретная практика программирования). Подстановочный знак никогда не используется в качестве аргумента типа для общего вызова метода, создания экземпляра универсального класса или супертипа.

Проверьте ссылку, вы найдете более исчерпывающую документацию, примеры и т. Д.

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

 public boolean checkClasses(Set<Class<?>> typeLessClassSet, Set instances){ while(typeLessClassSet.hasNext()){ Class c = typeLessClassSet.next(); while(instances.hasNext()){ Object o = instances.next(); if(o instanceof c) return true; } } return false; } в public boolean checkClasses(Set<Class<?>> typeLessClassSet, Set instances){ while(typeLessClassSet.hasNext()){ Class c = typeLessClassSet.next(); while(instances.hasNext()){ Object o = instances.next(); if(o instanceof c) return true; } } return false; } в public boolean checkClasses(Set<Class<?>> typeLessClassSet, Set instances){ while(typeLessClassSet.hasNext()){ Class c = typeLessClassSet.next(); while(instances.hasNext()){ Object o = instances.next(); if(o instanceof c) return true; } } return false; }