Тип класса Java

Вы можете решить эту проблему с помощью экзистенциального

trait Node[N<:Node[N]] { self:N =>
}

trait A extends Node[A]

trait B {
  def list:List[X forSome {type X <: Node[X]}]

  def as:List[A] = list.collect { case x:A => x }
}

, просто справедливое предупреждение forSome будет удалено из скалы в какой-то момент. Можете ли вы рассказать нам больше о том, что вы пытаетесь сделать? Майбер, есть более элегантный способ сделать это

8
задан ibadibam 20 September 2012 в 18:42
поделиться

5 ответов

Это означает, что может быть Класс любого типа.? подстановочный знак, обозначающий набор всех типов или 'любого'. Таким образом, можно позже сделать

Integer normalForm = new Integer();
normalFormClass = normalForm.getClass();

или

String normalForm = new String();
normalFormClass = normalForm.getClass();

Если Вы не знаете о дженериках на Java, прочитайте http://java.sun.com/developer/technicalArticles/J2SE/generics/

Что касается то, почему, я думаю, что это могло бы быть к строго специальному, что Вы используете дженерики везде и Ваш код, не совместимо с более старыми версиями Java, или возможно закрывать некоторый триггер счастливые IDE. И да,

Class foo 

и

Class<?> foo 

эквивалентны.

12
ответ дан 5 December 2019 в 08:01
поделиться

Кроме того, универсальная версия

Class<?> normalClass = null;

в значительной степени эквивалентно необработанной версии типа,

Class normalClass = null;

основное различие - то, что последний будет совместим с версиями Java, которые не поддерживают дженериков, как Java 1.4.

4
ответ дан 5 December 2019 в 08:01
поделиться

Класс <T> означает, что начиная с JDK 1.5, Класс является generified типом, который определяет класс. Один способ думать об этом состоит в том, что Класс является фабрикой для создания экземпляров его типа.
А именно, Класс <T> создает экземпляры типа T от Class.newInstance () метод.

От JDK 1.5 на рекомендуется Спецификацией Языка Java не использовать необработанные типы. Так, настоятельно рекомендовано, что при контакте с Экземпляром класса неизвестного типа, необходимо назвать его "Классом <?>" и не просто "Классом". Конечно, если Вы на самом деле знаете тип или некоторых связанных, Вы могли бы найти некоторые преимущества определения его.

3
ответ дан 5 December 2019 в 08:01
поделиться

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

2
ответ дан 5 December 2019 в 08:01
поделиться

Я сомневаюсь, что это - домашняя работа, так как я никогда не был в классе, который говорил об отражении.

Но это - простое пустое присвоение. Это ничего не делает.

0
ответ дан 5 December 2019 в 08:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: