Intereting Posts
Невозможно импортировать facebook-sdk 4.0.1 Автовоспроизведение видео в YouTube Почему в моем приложении говорится, что я запрашиваю разрешение для контактов? Создание растрового изображения из EditText и его содержимого Как остановить обслуживание самостоятельно? OnOptionsItemВыбранный возвращаемый неверный идентификатор Я хочу публиковать обновления местоположения каждые 15 минут на сервере, даже если приложение не работает на переднем плане Какой формат предназначен для камеры Android с необработанным PictureCallback? Выбор значений NULL в Android SQLite FloatingActionButton с SnackBar и CoordinatorLayout не будет работать с proguard Можно ли получить максимальную точность GPS в мобильном браузере? Разработка специального приложения для связи с устройством, которое подключается через порт USB на Android Ошибка xml слияния xml при раздувании Загрузите изображение с помощью функции Parse Cloud Code Странная ошибка в Eclipse Indigo

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

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

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; }