我从Kotlin调用Spring方法,Spring提供了2个签名,一个接受2个参数(第二个是varargs),另一个接受3个参数。
我想调用3-arg方法,但是我不知道如何匹配类型--它一直在调用2-arg版本,而varargs会发出声音。
下面是方法签名(我想调用第一个,但它一直在调用第二个):
@Override
public int update(String sql, Object[] args, int[] argTypes) throws DataAccessException {
return update(sql, newArgTypePreparedStatementSetter(args, argTypes));
}
@Override
public int update(String sql, @Nullable Object... args) throws DataAccessException {
return update(sql, newArgPreparedStatementSetter(args));
}
下面是我的Kotlin代码:
var sql = "INSERT INTO \"$sourceTable\" ($insertList) VALUES ($valueList)"
val p: Array<Any?> = params.toTypedArray()
val c: Array<Int> = columnTypes.toTypedArray()
targetJdbcTemplate.update(sql, p, c)
显然,有些地方出了问题,Array没有Map到Object[],因为调试器显示我在这里调用的是第二个方法,而不是第一个。
如何让Kotlin知道我想要哪个方法?如何将Array<Any?>
Array<Int>
Map到Object[]
和Int[]
,以便编译器能够理解?
2条答案
按热度按时间hgc7kmma1#
在Kotlin,
Array<Int>
是一个幕后的Integer[]
,而IntArray
是一个int[]
(参见here)。要解决此问题,可以将最后一行的
c
更改为c.toIntArray()
:93ze6v8z2#
在执行Kotlin-〉Java interrop时,Kotlin有特定的Array类型来帮助处理这种不明确的Type。
在这种情况下,您需要在Kotlin中使用
IntArray
来Map到Java中的适当类型还有许多其他基本数组类型,例如:字节数组、短数组、整数数组
参考:www.example.comhttps://kotlinlang.org/docs/arrays.html#primitive-type-arrays