title: Why is a `val` inside an `object` not automatically final?
body: <p>What is the reason for <code>val</code>s not (?) being automatically final in singleton objects? E.g.</p>
  
  <pre><code>object NonFinal {
     val a = 0
     val b = 1
  
     def test(i: Int) = (i: @annotation.switch) match {
        case `a` =&gt; true
        case `b` =&gt; false
     }
  }
  </code></pre>
  
  <p>results in:</p>
  
  <pre><code>&lt;console&gt;:12: error: could not emit switch for @switch annotated match
            def test(i: Int) = (i: @annotation.switch) match {
                                                       ^
  </code></pre>
  
  <p>Whereas</p>
  
  <pre><code>object Final {
     final val a = 0
     final val b = 1
  
     def test(i: Int) = (i: @annotation.switch) match {
        case `a` =&gt; true
        case `b` =&gt; false
     }
  }
  </code></pre>
  
  <p>Compiles without warnings, so presumably generates the faster pattern matching table.</p>
  
  <p>Having to add <code>final</code> seems pure annoying noise to me. Isn't an <code>object</code> final per se, and thus also its members?</p>