Java中使用Scala中的对象

准备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)
  }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值