Сообщение об ошибке, которое вы пропустили, не является посторонней деталью.«Я бы также ожидал поддержки от Scala по этому вопросу», вы также можете принять участие в этом процессе, читая сообщения об ошибках и, если вы не понимаете их, включайте их при задании вопроса, а не смутно перефразируя их.
Сообщения об ошибках, они важны.Даже когда они сбивают с толку.Особенно, когда они сбивают с толку.
Вот ошибка в 2.8.1:
a.scala:2: error: overriding method getScore in trait Solution of type ()Score[_ <: Score];
method getScore has incompatible type
def getScore: Score[_] = null
^
one error found
Вот ошибка с транком:
a.scala:2: error: overriding method getScore in trait Solution of type ()Score[_ <: AnyRef];
method getScore has incompatible type
def getScore: Score[_] = null
^
one error found
Естьздесь есть ключевое отличие, которое способствует тому, почему он работает с транком, когда я делаю так, как подсказывает мне сообщение об ошибке.
// this compiles with 2.9, but not with 2.8
class MySolution extends Solution {
def getScore: Score[_ <: AnyRef] = null
}
Способ использования необработанного типа Score в исходном коде Java (в качестве конструктора типа водно местоположение, но с подразумеваемым аргументом экзистенциального типа в другом, со вторым появлением, ограничивающим первое), удивительно, что это работает где угодно.Вы не хотите знать, какой ущерб от такого рода вещей уже нанесен компилятору.Это правда, что было бы неплохо, если бы просто работали необработанные типы, но многие вещи были бы хорошими.Некоторые вещи невозможны, некоторые нежелательны, а некоторые требуют слишком больших усилий от крошечного числа людей, удерживающих корабль на плаву.Сырые виды выигрывают тройную корону.