我打包了一个kotlin项目,当我在其他kotlin项目中使用它时,它按预期工作。但是,从Java项目中使用我在类构造函数上获得异常:
这是SensorData.kt文件
package io.igx.iot.model
import com.fasterxml.jackson.annotation.JsonProperty
import java.time.LocalDate
import java.util.*
/**
* @author Vinicius Carvalho
*/
data class SensorData(val type: String, val name: String, @JsonProperty("@timestamp") val timestamp: Date, val value: Double, val thermostatId: String)
data class Column(val type: String, val position: Int)
data class Report(val device: String, val id: String, val start: LocalDate, val end: LocalDate)
inline fun String.safeFloat() : Float {
return try {
this.toFloat()
} catch (e: NumberFormatException){
0.0f
}
}
inline fun String.safeDouble() : Double {
return try {
this.toDouble()
} catch (e: NumberFormatException){
0.0
}
}
inline fun String.safeInt() : Int {
return try {
this.toInt()
} catch (e: NumberFormatException){
0
}
}
inline fun String.safeLong() : Long{
return try {
this.toLong()
} catch (e: NumberFormatException){
0L
}
}
当我运行一个使用内部使用此数据类的类的Java应用程序时,我得到一个异常:java.lang.NoSuchMethodError:io.igx.iot.model.SensorData。(Ljava / lang /字符串; Ljava /郎/串; Ljava / util的/日期; DLjava /郎/串;)V
我是否遗漏了数据类中的内容?
更新
为了清楚起见,从不从java代码调用SensorData类,而是另一个名为EcobeeParser的kotlin类调用它:
sensors.add(SensorData(column.type, entry.key, date, read, report.id))
此类EcobeeParser
在java代码中调用为:
EcoBeeParser parser = new EcoBeeParser(new FileInputStream(new File("")), 19);
那是什么失败了,但是在一个kotlin项目中这是有效的:
val parser = EcobeeParser(FileInputStream(File)), 19)