首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >方法的二义性方法重载

方法的二义性方法重载
EN

Stack Overflow用户
提问于 2020-07-23 17:55:42
回答 1查看 595关注 0票数 0

当我尝试编译时,它说:方法java.math.BigDecimal#的方法重载的方法重载不明确,还说:由于以下对象之间的原型重叠,无法解析为null调用哪个方法...

代码语言:javascript
复制
def sql = ("Select d.*
from (select d.*,
             lead( (case when length <> 'N/A' then length else length_to_fault end)::float) over (partition by port_nbr, pair order by port, pair, d.add_date) as lengthh
      from diags d    
     ) d")

def lastRow = [id:-1, port_nbr:-1, pair:'', lengthh:-1.0]
dst_db1.eachRow( sql ) { row ->

  if ( row.port_nbr == lastRow.port_nbr && row.pair == lastRow.pair ) {
    BigDecimal lengthChange = 
      new BigDecimal( row.lengthh ) - new BigDecimal( lastRow.lengthh )

    if ( lengthChange > 30.0 ) {
        print "Port ${row.port_nbr}, ${row.pair} length change: $lengthChange"
        println "\tbetween row ID ${lastRow.id} and ${row.id}"
    }
    lastRow = row
  } else {
    println "Key changed"
    lastRow = row
  }
}

有没有人可以尝试修复这个错误?

编辑-新的完整错误:

代码语言:javascript
复制
Caught: java.lang.NumberFormatException: Character n is neither a decimal digit number, decimal point, nor "e" notation exponential mark.
java.lang.NumberFormatException: Character n is neither a decimal digit number, decimal point, nor "e" notation exponential mark.
        at java.base/jdk.internal.reflect.GeneratedConstructorAccessor10.newInstance(Unknown Source)
        at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at Main$_main_closure1.doCall(main.groovy:18)
        at jdk.internal.reflect.GeneratedMethodAccessor8.invoke(Unknown Source)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at Main.main(main.groovy:14)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
EN

回答 1

Stack Overflow用户

发布于 2020-07-23 20:57:35

看起来您的row.length字段不是String类型,正如代码所期望的那样。您需要将其转换为字符串或BigDecimal构造函数可以处理的另一种类型,例如:

代码语言:javascript
复制
BigDecimal lengthChange = 
   new BigDecimal( "${row.lengthh}" ) - new BigDecimal( "${lastRow.lengthh}" )

如果它仍然是一个问题,那么使用以下命令来确定问题类型:

代码语言:javascript
复制
println row.lengthh.class.name
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63051560

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档