1

私の知る限りval、Scala の a は不変の値です。それで... JFrame と JLabel が として宣言されている場合、なぜそのように変更できるのvalでしょうか?

package view

import javax.swing.JFrame
import javax.swing.JLabel
import java.awt.BorderLayout

object Hello {

  def main(args: Array[String]) {
    println(hello)
    val frame = new JFrame
    val label = new JLabel()

    // here I am modifying val's!
    label setText ("hello")

    frame setSize (500, 500)
    frame getContentPane () setLayout (new BorderLayout)
    frame add (label, BorderLayout CENTER)
    frame setVisible (true)
    frame setDefaultCloseOperation (JFrame EXIT_ON_CLOSE)
  }

}
4

5 に答える 5

4

ラベルまたはフレームへの参照を再割り当てしていません。それは許されないことです。

于 2013-06-24T18:24:06.020 に答える
3

val value = new MyClassへの新しい参照をバインドできないことを意味しますvalue:

value = new MyClass // is illegal
value.changeObjectState  // is legal 
于 2013-06-24T18:27:47.223 に答える
1

frame参照しているオブジェクトを変更できます。ただし、参照自体を変更することはできません。これを試してください:

val frame = new JFrame()
frame = new JFrame()
于 2013-06-24T18:26:29.850 に答える
1

val変数に新しいオブジェクトを代入できないようにするだけです。によって参照されるオブジェクトの状態を引き続き変更できますval

于 2013-06-24T18:27:19.773 に答える