Vediamo cosa significa in chiaro inglese.
class A[X]
significa: sia A una classe che accetta un parametro di tipo.
class C[M[X] <: A[X]]
significa: sia C una classe che accetta un parametro tipo, che dovrebbe essere una classe che accetta un parametro di tipo AND, parametrizzato, è una sottoclasse di classe A parametrizzati con lo stesso tipo.
Quando si scrive
new C[A]
stai dicendo: creare un'istanza di C con A come parametro. A è conforme ai criteri sopra riportati? Sì, è una classe che accetta un parametro di tipo e la sua parametrizzazione è una sottoclasse di se stesso parametrizzata.
Tuttavia, quando si scrive
new C[A[Int]]
il parametro di tipo si sta cercando di dare C, A [Int], non conformi ai criteri: A [Int] non accetta parametri di tipo, che il compilatore gentilmente ti dice (E nemmeno una sottoclasse di A [X].)
fonte
2011-01-06 14:49:43
questo non farà il lavoro neanche. Il problema è che C si aspetta un tipo con un parametro di tipo. Quando provi la nuova C [A], questo funzionerà, perché A accetta un argomento di tipo. – tim
Questo non funzionerà - C ora si aspetta due parametri di tipo. – gpampara