Карта на потоке дополнительного типа

#java #dictionary #java-8 #stream #optional

#Ява #словарь #java-8 #течение #необязательный

Вопрос:

У меня была проблема с компилятором, которую я смог свести к этому примеру. Этот код

 class Alt;Tgt; {  Optionallt;Integergt; op;   public Optionallt;Integergt; getOp() {  return op;  } } Listlt;Agt; l = null; l.stream().map(x -gt; x.getOp().orElse(0)).max(Comparator.naturalOrder());  

не компилируется с

 error: incompatible types: inference variable T has incompatible bounds  [javac] l.stream().map(x -gt; x.getOp().orElse(0)).max(Comparator.naturalOrder());  [javac] ^  

Если я удаляю универсальный параметр lt;Tgt; (который вообще не используется в классе), то этот фрагмент компилируется. Что здесь происходит? Я использую Java 8.

Комментарии:

1. Не используйте необработанные типы. Listlt;Agt; имеет необработанный тип как A универсальный. Необработанные типы и вывод типов не играют хорошо!

2.Ввод необработанного типа A Listlt;Agt; приводит к потере всей общей информации, включая тип возвращаемого getOp() значения , даже если это не связано T . Кроме того, Optionallt;Integergt; getOp() запахи, когда заключающий тип Alt;Tgt; . Разве это не должно быть как-то связано с Optionallt;Tgt; этим ?

3. А как насчет использования Listlt;Alt;?gt;gt; вместо Listlt;Agt; ?

4. Это просто пример, когда у универсального метода есть метод, не зависящий от параметра универсального типа. Реальный пример выглядит так class A implements Iterablelt;Bgt; : где B находится универсальный интерфейс. Поэтому A в объявлении в качестве параметра типа используется «необработанный интерфейс». Я почитаю об этом. Спасибо!

5. Это не одно и то же. A является необработанным типом и Alt;?gt; универсальным типом с подстановочными знаками. Похоже, что проблема заключалась в необработанном типе.