| 
Scala example source code file (inner.scala)
 The Scala inner.scala source code
//############################################################################
// Test Java interaction with scala inner classes
//############################################################################
import java.io.{BufferedReader, File, FileWriter, InputStreamReader}
class A {
  val abc = "A.abc"
  protected class B(x: Int, y: String) {
    println(abc); println(x)
    println(y)
  }
  trait Itf {
    def method1(x: Int): Int
    
    trait Itf2 extends Itf {
      def method2: Unit
    }
  }
  trait PlainTrait {
    def method1(x: Int): Int
  }
  class Impl(a: Int) extends Itf {
    def method1(x: Int) = {
      println(x)
      println(a)
      x + a
    }
  }
  val impl = new Impl(0)
  class Impl2 extends Impl(1) with impl.Itf2 {
    def method2 = {
      println(abc)
    }
  }
  def newImpl: Itf = new Impl(1)
  def newImpl2: Itf#Itf2 = new Impl2
  class Outer1(arg1: Int) {
    class Outer2(arg2: Int) {
      class Outer3(arg3: Int) {
        println("Outer3: " + arg1 + " " + arg2 + " " + arg3);
      }
    }
  }
}
object Scalatest {
  private val outputdir = System.getProperty("partest.output", "inner.obj")
  private val scalalib  = System.getProperty("partest.lib", "")
  private val classpath = outputdir + File.pathSeparator + scalalib
  private val javabin  = {
    val jhome = new File(System.getProperty("java.home"))
    if (jhome.getName == "jre")
      new File(jhome.getParent, "bin").getAbsolutePath
    else
      new File(jhome, "bin").getAbsolutePath
  }
  private val javacmd   = javabin + File.separator + "java"
  private val javac     = javabin + File.separator + "javac"
  def javac(src: String, fname: String) {
    val tmpfilename = outputdir + File.separator + fname
    val tmpfile = new FileWriter(tmpfilename)
    tmpfile.write(src)
    tmpfile.close
    exec(javac + " -d " + outputdir + " -classpath " + classpath + " " + tmpfilename)
  }
  def java(cname: String) =
    exec(javacmd + " -cp " + classpath + " " + cname)
  /** Execute cmd, wait for the process to end and pipe it's output to stdout */
  private def exec(cmd: String) {
    val proc = Runtime.getRuntime().exec(cmd)
    val inp = new BufferedReader(new InputStreamReader(proc.getInputStream))
    val errp = new BufferedReader(new InputStreamReader(proc.getErrorStream))
    proc.waitFor()
    while (inp.ready) println(inp.readLine())
    while (errp.ready) println(errp.readLine())
  }
}
object Test {
  def main(args: Array[String]) {
    val javaInteraction = """
public class JavaInteraction {
    public static void main(String[] args) {
        A a = new A();
        A.B b = a.new B(1, "Hello");
        A.Itf itf = a.newImpl();
        itf.method1(1);
        A.Itf.Itf2 itf2 = a.newImpl2();
        itf2.method2();
        A.Outer1 o1 = a.new Outer1(1);
        A.Outer1.Outer2 o2 = o1.new Outer2(2);
        A.Outer1.Outer2.Outer3 or = o2.new Outer3(3);
    }
}
"""
    Scalatest.javac(javaInteraction, "JavaInteraction.java")
    Scalatest.java("JavaInteraction")
    val accessingScala = """
public class AccessingScala {
    public static void main(String[] args) {
        A a = new A();
        System.out.println(a.abc());
    }
}
"""
    Scalatest.javac(accessingScala, "AccessingScala.java")
    Scalatest.java("AccessingScala")
  }
}
//############################################################################
Other Scala examples (source code examples)Here is a short list of links related to this Scala inner.scala source code file:  | 
| ... this post is sponsored by my books ... | |
         
           #1 New Release!  | 
      
         
           FP Best Seller  | 
  
Copyright 1998-2024 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.