Aqui está uma dica rápida para quando você tem muitos objetos que deseja trazer para o escopo sem ter várias importações repetidas. Particularmente útil para construções de estilo de enum.
Digamos que você tenha as seguintes definições
package com.sksamuel.role
trait Role
object Role {
case object Admin extends Role
case object Developer extends Role
case object Staff extends Role
case object Customer extends Role
}
Em seguida, crie uma característica que altere o tipo e os valores.
package com.sksamuel.role
trait Roles {
val Role = otherpackage.Role
type Role = otherpackage.Role
}
Agora você pode, é claro, misturar a característica para obter as importações, mas podemos dar um passo adiante e misturar a característica com um objeto de pacote para obter as importações gratuitamente em todo o pacote.
package com.sksamuel.elsewhere
package object elsewhere extends com.sksamuel.role.Roles
Agora as importações estão disponíveis para tudo no pacote com.sksamuel.elsewhere.