准备Scala类
项目中引入 scala 2.11.12版本 2.11.8是经典版本,其实版本无所谓
/**
* @Author: jsy
* @Date: 2020/1/18 21:24
*/
class ScalaUtils {
private def initConfig(): Unit = {
val str: String = ""
str
}
}
object ScalaUtils {
/**
* object代表对象,scala中对象都是单例的,不管调用多少次,创建多少次,只会创建一个对象
* Scala中没有静态方法或者静态属性,可以使用object这样的语法达到相同目的。
* object中属性是静态属性,方法是静态方法,可以用 对象名.方法名 直接调用
*
* 伴生对象 :
* 当类名(class)和单例类(object)名字一样的时候,我们把单例类称为伴生对象
*
* 可以把普通方法写在类里,把静态方法写在伴生对象里
*
* 一半黄色和一半蓝色是伴生类和伴生对象
*
* 伴生类中 可以调用伴生对象的私有方法,<类名.方法名> 类加载时机,静态成员先初始化 所以反之不行
*
*
*/
val KEY_TDW_TABLE_FEATURE_CODE = "TDW_TABLE_FEATURE_CODE"
def aaa: String =
"aaa"
def bb: String =
s"hhh this is bb"
/**
* 这样定义bb,无法通过语法校验,可能是java没有自动推断数据类型的机制
def bb: String =
bbb
* */
def aggregation: String =
s"$aaa++++$bb======$KEY_TDW_TABLE_FEATURE_CODE"
}
java调用scala的类
/**
* @Author: jsy
* @Date: 2020/1/18 21:23
*/
public class JavaUseScala {
public static void main(String[] args) {
/**
* java调用scala
* java使用伴生对象: 伴生对象名$.MODULE$.方法名();
* */
String a = ScalaUtils$.MODULE$.aaa();
ScalaUtils$ module = ScalaUtils$.MODULE$;
String b = module.bb();
String s = ScalaUtils$.MODULE$.KEY_TDW_TABLE_FEATURE_CODE();
String aggregation = ScalaUtils$.MODULE$.aggregation();
System.out.println("a = " + a);
System.out.println("b = " + b);
System.out.println("s = " + s);
System.out.println("aggregation = " + aggregation);
/** result:
* a = aaa
* b = hhh this is bb
* s = TDW_TABLE_FEATURE_CODE
* aggregation = aaa++++hhh this is bb======TDW_TABLE_FEATURE_CODE
* */
}
}
Tuple(元组)重要
Scala提供了1-22个Tuple对象,分别是1-22个参数的元组,有点像泛型为 Object 的 ArrayList 集合,可以往集合中存任意对象类型的数据
在 Scala 中,元组是一个可以容纳不同类型元素的类。 元组是不可变的。
创建
// 创建 直接括弧就行
val t1 = (1, "zs", false, 10.0)
println(t1.getClass) //Tuple4
可以元组套元组
val t2 = ((1,2),"zs")
使用
使用下划线语法来访问元组中的元素。 ‘tuple._n’ 取出了第 n 个元素(假设有足够多元素)
// 使用
println(t1._1)
println(t1._2)
println(t1._3)
println(t1._4)
// 或使用
// 通过productElement获取元组内容 用的少
println(t1.productElement(0)) // 下标
元组的遍历
// 元组的遍历
for(item <- t1.productIterator){
println("item:"+item)
}
scala的解释器窗口,要写入多行代码时,可以使用 :paste (粘贴模式,可以写多行), 结束后使用ctrl+d
Java和Scala集合的转换
比较难处理的可能转换成java集合来处理,处理完再转换成scala
https://docs.scala-lang.org/zh-cn/overviews/collections/conversions-between-java-and-scala-collections.html
package com.baizhi.array
import scala.collection.mutable._
import scala.collection.JavaConverters._ // 隐式转换的包
object ArrayToListDemo01 {
def main(args: Array[String]): Unit = {
// scala集合转为java.util.List
val arr = ArrayBuffer[Integer](1, 2, 3, 4, 5).asJava // 参数的隐式转换
//A.m1(arr)
//println(arr.getClass)
// java.util.List转为scala集合
val arr2 = arr.asScala
println(arr2.getClass)
}
}