Il y a a mailing list thread où Martin a répondu:
Il correspond à la machine virtuelle Java. Vous pouvez omettre une initialisation de champ mais pas une initialisation de variable locale. L'omission des initialisations de variables locales signifie que le compilateur doit être capable de synthétiser une valeur par défaut pour chaque type. Ce n'est pas si facile face aux paramètres de type, à la spécialisation, etc.
Lorsque vous appuyez sur la façon dont il est ou devrait être une distinction entre les champs et les locaux en matière de Scala synthétisant les valeurs par défaut, il a poursuivi en disant:
En termes de bytecode il y a une claire différence. La machine virtuelle Java initialise les champs d'objet par défaut et requiert que les variables locales soient initialisées explicitement. [...] Je ne suis pas sûr si nous devrions casser un principe utile de Java (les locales doivent être initialisées avant d'être utilisées), ou si nous devrions plutôt aller la pleine longueur et introduire la vérification d'initialisation basée sur le flux comme en Java. Ce serait la meilleure solution, l'OMI, mais cela exigerait un travail important en termes de spécifications et de mise en œuvre. Face à ces choix mon instinct naturel est de ne rien faire pour l'instant :-)
Donc, si je comprends bien, le compilateur Scala ne synthétise pas réellement les valeurs par défaut pour les champs d'objet, il produit bytecode qui laisse la machine virtuelle Java pour gérer ce.En accord avec SI-4437, Martin a approuvé le modèle null.asInstanceOf[T]
dans la spécification de langage, apparemment pour ne pas être capable de supporter une meilleure alternative dans les contraintes existantes.
Alors pourquoi devrait-il en être ainsi? – Raman