Tem trait
como abaixo
trait MyTrait
{
val country: String,
val state: String,
val commune: String = "nothing"
}
Agora implementandoMyTrait
case class ImplementTrait(
country:String,
state: String,
//commune, how to provide commune's default value if commune is not provided while initialising ImplementTrait
) extends MyTrait
Por exemplo
ImplementTrait(country, state)
, deve funcionar e porque assumirá commune
o valor padrão
ImplementTrait(country, state, commune)
, também deve funcionar e porque commune
o valor está presente agora
alguma sugestão?
Não creio que haja algo automático que você possa fazer facilmente , mas talvez você queira considerar algo como o seguinte:
Você pode brincar com esse código aqui no Scastie .
Observe algumas alterações que fiz na sua sugestão original, como feedback adicional:
val
s emtrait
s: você sabe o que é melhor, é claro, para o caso de uso que deseja cobrir, mas em geralval
s emtrait
tende a ser desencorajado, pois a ordem em que você herda características pode afetar a inicialização da classe (veja aqui para mais detalhes)final case class
: embora você não possa herdar diretamente entre classes de caso, você pode ter uma classe normal herdando de uma classe de caso — isso é algo muito improvável que você queira e pode afetar a semântica de valor, e é por isso que geralmente é recomendado tornar todas as classes de caso finais (veja aqui para mais detalhes)