Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

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

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

Ответ 3

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

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

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

Ответ 4

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

Ответ 5

От: Wildcards

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

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

Ответ 6

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

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