alvinalexander.com | career | drupal | java | mac | mysql | perl | scala | uml | unix  

Scala example source code file (checked.scala)

This example Scala source code file (checked.scala) is included in the DevDaily.com "Java Source Code Warehouse" project. The intent of this project is to help you "Learn Java by Example" TM.

Java - Scala tags/keywords

a, badx, goodx, int, int, lazyfields, lazyfields, needsxearly, needsxearly, ok, ok, t, ufe, xy

The Scala checked.scala source code

/* Test checked initializers. Needs to be run with -Xexperimental and -checkinit
 */

// 0 inherited fields
class A {
  val x = 1
  val y = 2
  var z = 3
}

// 3 inherited fields
class B extends A {
  val b1 = 1
  var b2 = 2
}


trait T {
  val t1 = 1
  var t2 = 2
}

// Should not throw
class D extends B with T {
  val sum = x + y + z + b1 + b2 + t1 + t2
  override def toString = 
    "sum = " + sum
    
}

abstract class NeedsXEarly {
  val x: Int
  val y = x + 1
}

// should pass
class GoodX extends { val x = 1 } with NeedsXEarly {
}

// should throw
class BadX extends NeedsXEarly {
  val x = 1
  println(y)
}

// should pass
class UglyX extends NeedsXEarly {
  lazy val x = 1
  println(y)
}

trait XY {
  val x = 1
  val y = 2
}

// needs x and y early
trait LazyFields {
  lazy val lz1 = 1
  lazy val lz2 = 2
  val x: Int
  val y: Int
  val needsSomeEarly = {
    println("x = " + x)
    println("y = " + y)
    println("lz1 = " + lz1)
    println("lz2 = " + lz2)
    x + y + lz1 + lz2
  }
}

// will fail at init
class BadMixin extends LazyFields with XY {
  println("[OK]: " + needsSomeEarly)
}

// should print 24
class GoodMixin extends {
        override val x = 10
        override val y = 11
      } with LazyFields with XY {
  println("[OK]: " + needsSomeEarly)
}

class TestInterference extends {
  override val x = 10
  override val y = 11
} with A with T with LazyFields {
  println("[OK]: " + needsSomeEarly)
}


object Test extends App {
  
  def shouldThrow(t: => Unit) = try {
    t
    println("[FAIL]: No UFE thrown")
  } catch {
    case UninitializedFieldError(msg) =>
      println("[OK] Caught UFE: " + msg)
  }


  val d = new D()
  println(d)

  shouldThrow(new BadX)
  (new GoodX)
  (new UglyX)

  shouldThrow(new BadMixin)
  (new GoodMixin)

  (new TestInterference)
}

Other Scala examples (source code examples)

Here is a short list of links related to this Scala checked.scala source code file:

... this post is sponsored by my books ...

#1 New Release!

FP Best Seller

 

new blog posts

 

Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.

A percentage of advertising revenue from
pages under the /java/jwarehouse URI on this website is
paid back to open source projects.