scala case object pollution

enums, namespaces, scala

Solution

you could do something like:

object RoleGroup {
  sealed trait RoleGroup
  case object ADMIN extends RoleGroup
  case object MEMBER extends Rolegroup
}

and similarly for `MailSender`. Then in situations where you're only using one, you can do `import MailSender._` or vise versa, but when using both you refer to them as `RoleGroup.ADMIN`, etc.

Whether you want to take this approach or use Enums mostly depends on how you intend to use them. In this aproach, each "enum" is a type, whereas with Enums each enum is a value. The former works better for pattern matching since the compiler can check if your matches are exhaustive, the latter is better (IMO) for working with serialization.

Problem

Let me explain ;-) both classes below are in package com.company.foo ``` RoleGroup.scala abstract class RoleGroup case object ADMIN extends RoleGroup case object MEMBER extends RoleGroup MailSender.scala abstract class MailSender case object ADMIN extends MailSender case object STAFF extends MailSender case object ACCOUNTANT extends MailSender ``` The problem here is that ADMIN is ambiguous since there is no namespace separation with case objects. It seems there can only be one uniquely named case object per package. I suppose I could name case objects based on function a la mailADMIN, roleADMIN and so on. Or should I just create proper Enums and forget about case objects? Or take some other approach?

Original source