The error message which you omitted is not an extraneous detail. Re "I would also expect some support from Scala on this", you might also opt to participate in the process by reading the error messages and, if you don't understand them, include them when asking a question rather than vaguely paraphrasing them.
Error messages, they're important. Even when they're confusing. Especially when they're confusing.
Here is the error in 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
Here is the error with trunk:
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
There is a key difference there, which contributes to why it works with trunk when I do as the error message instructs me.
// this compiles with 2.9, but not with 2.8
class MySolution extends Solution {
def getScore: Score[_ <: AnyRef] = null
}
The way the raw type Score is being used in the java source (as a type constructor in one location but with an implied existential type argument in another, with the second appearance bounding the first) it's a wonder it works anywhere. You don't want to know how much damage accomodating this sort of thing has already inflicted on the compiler. It's true that it would be nice if raw types just worked, but many things would be nice. Some things are not possible, some things are not desirable, and some things require too much effort from the tiny number of people keeping the ship afloat. Raw types win the triple crown.