Lass es mich erklären; -)
Beide Klassen sind im Paket com.company.foo
enthalten %Vor%Das Problem hier ist, dass ADMIN mehrdeutig ist, da es keine Namensraumtrennung mit Fallobjekten gibt. Es scheint, dass es nur ein einziges Fall-Objekt pro Paket geben kann.
Ich nehme an, ich könnte Fallobjekte basierend auf der Funktion a la mailADMIN, roleADMIN usw. nennen. Oder sollte ich nur richtige Enums erstellen und Case-Objekte vergessen? Oder einen anderen Weg gehen?
Sie könnten etwas tun wie:
%Vor% und ähnlich für MailSender
. In Situationen, in denen Sie nur eine verwenden, können Sie import MailSender._
verwenden oder umgekehrt, aber wenn Sie beide verwenden, verweisen Sie auf sie als RoleGroup.ADMIN
usw.
Ob Sie diesen Ansatz verwenden oder Enums verwenden, hängt hauptsächlich davon ab, wie Sie diese verwenden möchten. In diesem Ansatz ist jedes "Enum" ein Typ, während bei Enums jedes Enum ein Wert ist. Ersteres funktioniert besser für die Mustererkennung, da der Compiler prüfen kann, ob Ihre Übereinstimmungen vollständig sind, letzteres ist besser (IMO) für die Arbeit mit der Serialisierung.
Sie brauchen hier keine Aufzählung, so viel wie sonst wo. Alles, was Sie brauchen, ist der richtige Namespace. Ich finde den Companion-Objekt-Ansatz am nützlichsten:
%Vor%Wenn Sie es so verwenden, werden Sie sehr an die Java-Enums erinnern, während Sie auch die Stärken von Scala erhalten:
%Vor% Bitte beachten Sie, dass in der Lösung von Dan die Art von roleGroup
RoleGroup.RoleGroup
wäre, was sich irgendwie unnatürlich anfühlt. Beachten Sie auch, dass Großbuchstaben die Scala-Stilkonventionen verletzen und aus den obigen Beispielen können Sie den Grund erkennen.
Tags und Links scala namespaces enums