я столкнулся то, что я не совсем понимаю, так что давайте начнем:Ссылки на случай объектов с использованием признака
Если у меня есть этот объект:
case object StartMessage
написанный, как и выше, и затем получить свои ссылки из двух разных классов:
class Test2 {
def print(){
println(Integer.toHexString(System.identityHashCode(StartMessage)))
}
}
class Test1 {
def print(){
println(Integer.toHexString(System.identityHashCode(StartMessage)))
}
}
, как ожидаемый результат:
object ActorMain extends App{
new Test1().print()//45c8e616
new Test2().print()//45c8e616
}
Но когда я изменить случай объекта, чтобы упаковать его в черта:
trait model{
case object StartMessage
}
тогда мои классы будут иметь декларацию как:
class Test1 extends model{
class Test2 extends model{
я получаю:
45c8e616
7d417077
* 1 , Не могли бы вы объяснить мне это? Я думал, что объекты являются единым целым приложением, поэтому, когда я создаю Trait с объектами в нем, каждый раз, когда я буду расширять (используйте «с») эти черты, объект будет таким же, а не в некоторой степени.
* 2. Есть ли другой способ получить функциональность для «добавления» одних и тех же объектов только с расширением черты к конкретным классам и не сделать их видимыми для всего приложения? Дело в том, чтобы иметь более чистый код с возможностью «маркировать» классы как «они используют эти объекты, в то время как другие не делают»
Объекты не являются одиночными для приложения, а скорее в пределах их объявленного объема. В большинстве примеров используется «объект» в области пакета, который эффективно привязан к приложению. –