猿问

从 Java 调用 Scala“val 函数”会出错

我有一个 scala val 函数,如下所示:


  val getTimestampEpochMillis = (year:Int, month:Int, day:Int, hour:Int, quarterHour:Int, minute:Int, seconds:Int) => {

    var tMinutes = minute

    var tSeconds = seconds

    if(minute == 0){

      if(quarterHour == 1){

        tMinutes = 22

        tSeconds = 30

      }else if(quarterHour == 2){

        tMinutes = 37

        tSeconds = 30

      }else if(quarterHour == 3){

        tMinutes = 52

        tSeconds = 30

      }else if(quarterHour == 0){

        tMinutes = 7

        tSeconds = 30

      }

    }


    val localDateTime = LocalDateTime.of(year, month, day, hour, tMinutes, tSeconds)

    localDateTime.atZone(ZoneId.of("GMT")).toInstant().toEpochMilli()

  }

当我从 Java 调用此函数时,出现以下错误:


[ERROR]   required: no arguments                                          

[ERROR]   found: int,int,int,int,int,int,int                              

[ERROR]   reason: actual and formal argument lists differ in length    

调用 scala val 函数的 Java 代码:


Long minTimestampOfGranularity = getTimestampEpochMillis(year, 1, 1, 0, 0, 0, 0);


牛魔王的故事
浏览 77回答 1
1回答

叮当猫咪

尝试getTimestampEpochMillis().apply(year,&nbsp;1,&nbsp;1,&nbsp;0,&nbsp;0,&nbsp;0,&nbsp;0);()并注意中的括号getTimestampEpochMillis()。javap使用我们得到的检查生成的类public&nbsp;scala.Function7<java.lang.Object,&nbsp;java.lang.Object,&nbsp;java.lang.Object,&nbsp;java.lang.Object,&nbsp;java.lang.Object,&nbsp;java.lang.Object,&nbsp;java.lang.Object,&nbsp;scala.runtime.BoxedUnit>&nbsp;getTimestampEpochMillis();我们看到getTimestampEpochMillis()returns 的地方scala.Function7,所以我们首先必须先调用,getTimestampEpochMillis()然后才能调用apply参数。
随时随地看视频慕课网APP

相关分类

Java
我要回答