2015-05-07 5 views
1

Я учусь Scala программирования многопоточного и написать простую программу через ссылаясь на учебнике:Как понять "новый {}" синтаксис в Scala?

object ThreadSleep extends App { 
    def thread(body: =>Unit): Thread = { 
    val t = new Thread { 
     override def run() = body 
    } 
    t.start() 
    t 
    } 
    val t = thread{println("New Therad")} 
    t.join 
} 

Я не могу понять, почему использовать {} в new Thread {} заявления. Я думаю, что это должно быть new Thread или new Thread(). Как я могу понять этот синтаксис?

Этот вопрос не полностью дублирован this one, потому что мой вопрос касается синтаксиса «new {}».

+0

Возможный дубликат [Анонимный подкласс в Scala] (http://stackoverflow.com/questions/18813503/anonymous-subclass-in-scala) – Suma

ответ

3

Это ярлык для

new Thread() { ... } 

Это называется анонимный класс и он работает так же, как в JAVA: Вы здесь создание нового потока, с перекрываться run методом. Это полезно, потому что вам не нужно создавать специальный класс, если вы используете его только один раз. Требуется подтверждение, но вы можете переопределить, добавить, переопределить каждый метод или атрибут, который вы хотите.

Смотрите здесь для более подробной информации: https://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html

1

new Thread{} Написав ваше создание анонимного подкласса Thread, где вы переопределение метода run. Как правило, вы бы предпочли, чтобы создать подкласс Runnable и создать поток с ним вместо подклассов Thread

val r = new Runnable{ override def run { body } } 
new Thread(r).start 

Это обычно sematincally более правильным, так как вы хотите подкласс Thread только если вы Специализируя Thread класс больше, например, с AbortableThread. Если вы просто хотите запустить задачу в потоке, то подход Runnable более адекватен.

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