11
votes

Quel est le but d'étendre un type anonyme dans Scala?

J'essaie de mieux comprendre Scala, et je ne peux pas sembler trouver une upeCase valide pour le code comme suit:

class C extends { def m() { /* ... */ } }


2 commentaires

L'exemple que vous donnez n'est pas un type de structure, mais une classe anonyme. Pas que cela explique pourquoi vous pouvez l'étendre ...


Droit vous êtes, j'ai mis à jour le titre


3 Réponses :


12
votes

Je suppose que la seule justification ici est "éviter les cas spéciaux si possible". Vous pouvez étendre n'importe quelle classe, une classe anonyme est une classe, vous pouvez donc prolonger une classe anonyme.


4 commentaires

Vous avez probablement raison (+1). Aimerait bien un cas d'utilisation réelle, si on existe vraiment :)


Je suis d'accord avec Kim, héritant permet de partager des comportements ou de représenter une hiérarchie donnée. Mais si la classe des parents de Anonymous, vous ne pouvez pas avoir deux classes d'enfants prolongeant la même classe mère.


Vous ne pouvez pas étendre les classes final . Je suppose que les cours anonymes pourraient être définitifs, mais en l'absence de quelque raison que ce soit d'étendre une classe anonyme, cela ne fait probablement aucune différence s'ils sont finaux ou non.


J'aimerais rappeler aux utilisateurs que cette réponse est fausse. Il a été la réponse acceptée depuis quelques années maintenant et elle est trompeuse car elle n'a rien à voir pour éviter les cas spéciaux. Voir ma réponse ci-dessous.



11
votes

Ce n'est pas, en fait, une classe anonyme! C'est un initialiseur anticipé et il court dans le cadre du constructeur qui passe avant sa superclasse. Citant l'excellente réponse de Une autre question Stackoverflow : xxx < / pré>

Si le code a été écrit à la place comme xxx

, une exception de pointeur nulle se produirait lorsque Z a été initialisé, car la taille est initialisée avant le nom de la commande normale d'initialisation (superclasse avant la classe).


0 commentaires