Scala Version 2.12.1-20161205-201300-2787b47Anruf `ConcurrentLinkedQueue.poll` auf leere Warteschlange scheint 0 zurück statt null
val max = 20
val queue = new java.util.concurrent.ConcurrentLinkedQueue[Int]()
(1 to 10).foreach(queue.offer)
def show(c: Int): Unit = {
val e = queue.poll()
if(c < max && e != null) {
println(e)
show(c + 1)
}
}
show(0)
Repl Ausgang
1
2
3
4
5
6
7
8
9
10
0
0
0
0
0
0
0
0
0
0
Was ist passiert?
Sie können "null" keinem "Int" zuweisen (es ist kein Referenztyp). Also wird es in 0 umgewandelt. Die Verwendung von null wird in scala im Allgemeinen abgeraten. Dies ist einer der Gründe dafür. Sie schreiben Java-Code in Scala-Syntax, es ist nicht sehr nützlich. In die Scala-Denkweise einsteigen. – Dima
@Dima Gibt es eine skalare Alternative zu 'ConcurrentLinkedQueue'? – jilen