2015-07-23 4 views
1

Я не собираюсь строить класс. Животное, в котором я могу найти количество животных, было создано. В Scala нет возможности статической переменной, поэтому как я могу реализовать такую ​​функциональность в Scala (я ищу неспецифическое решение)?Scala, как заменить статические элементы?

Спасибо!

Например, в Java:

public class Amimal { 
    static int number_of_aminals = 0; 
    public Animal() { 
     number_of_animals++; 
    } 
} 

ответ

1

Один из вариантов:

import Animal 

class Animal { 
    Animal.increment() 
} 

object Animal { 
    private[this] var _count = 0 

    def increment(): Unit = { _count += 1 } 
    def count: Int = _count 
} 

Хотя вы можете использовать AtomicInt.

1

Вы можете создать объект компаньоном для вашего дела класса, который действует как синглтон:

case class Animal(name:String) { 
    Animal.incrementAnimal 
} 

object Animal { 
    def incrementAnimal = ... 
} 

Однако, иметь в виду, что после подхода выше, потребует вы должны использовать изменяемые переменные (переменные, определяемые var вместо val), что не рекомендуется в Scala. Поэтому вы можете захотеть пересмотреть свой дизайн, чтобы использовать неизменяемые значения.

+0

Это кажется менее приятным, чем Java. Спасибо тебе того же! –

Смежные вопросы