使用vararg调用Java函数时未在Kotlin中编译

使用vararg调用Java函数时未在Kotlin中编译,java,kotlin,Java,Kotlin,我试图从Kotlin调用Java方法,但编译器无法找到正确的签名 该方法有2个签名: Observable<Query> createQuery(@NonNull final String table, @NonNull String sql, @NonNull String... args) Observable<Query> createQuery(@NonNull final Iterable<String> tables, @NonNull Str

我试图从Kotlin调用Java方法,但编译器无法找到正确的签名

该方法有2个签名:

Observable<Query> createQuery(@NonNull final String table, @NonNull String sql, @NonNull String... args) 

Observable<Query> createQuery(@NonNull final Iterable<String> tables, @NonNull String sql, @NonNull String... args)
但是编译器说

None of the following functions can be called with the arguments supplied: 
public open fun createQuery(android.support.annotation.NonNull tables: kotlin.(Mutable)Iterable<kotlin.String!>!, android.support.annotation.NonNull sql: kotlin.String!, android.support.annotation.NonNull vararg args: kotlin.String!): rx.Observable<com.squareup.sqlbrite.SqlBrite.Query!>! defined in com.squareup.sqlbrite.BriteDatabase
public open fun createQuery(android.support.annotation.NonNull table: kotlin.String!, android.support.annotation.NonNull sql: kotlin.String!, android.support.annotation.NonNull vararg args: kotlin.String!): rx.Observable<com.squareup.sqlbrite.SqlBrite.Query!>! defined in com.squareup.sqlbrite.BriteDatabase
使用提供的参数无法调用以下函数:
public open fun createQuery(android.support.annotation.NonNull表:kotlin.(可变)Iterable!、android.support.annotation.NonNull sql:kotlin.String!、android.support.annotation.NonNull vararg args:kotlin.String!):rx.Observable!在com.squareup.sqlbrite.BriteDatabase中定义
public open fun createQuery(android.support.annotation.NonNull表:kotlin.String!、android.support.annotation.NonNull sql:kotlin.String!、android.support.annotation.NonNull vararg args:kotlin.String!):rx.Observable!在com.squareup.sqlbrite.BriteDatabase中定义

我读到Kotlin和Java method与vararg之间存在一些中断问题,有没有办法在不使用Java类作为桥的情况下解决这些问题?

这是因为对象的类型是
BriteDatabase?
,所以我必须将其与
db一起使用
db?


也许应该改进错误消息

如果
db
是可为null的类型(即
DbConnection?
),并且不能在null上进行调用,则无法重现问题(kotlin 0.12.613),那么在kotlin的旧版本中,错误消息令人困惑。它在Kotlin的后续版本中得到了改进。通常,您现在会收到一条关于可空性的消息,需要使用safe call或其他对空友好的运算符。关于中与null相关的运算符的更多信息:我面临相同的问题我在java中有一个方法,它接受
int
的vararg参数,我试图从kotlin函数调用该方法,该函数的vararg参数为
int
,但它会给我一个编译时错误
类型不匹配:推断的类型是inaray,但int是预计
可能在Kotlin的后续版本中有所改进。通常,您现在会收到一条关于可空性的消息,需要使用safe call或其他对空友好的运算符。有关空相关运算符的详细信息,请参见:
None of the following functions can be called with the arguments supplied: 
public open fun createQuery(android.support.annotation.NonNull tables: kotlin.(Mutable)Iterable<kotlin.String!>!, android.support.annotation.NonNull sql: kotlin.String!, android.support.annotation.NonNull vararg args: kotlin.String!): rx.Observable<com.squareup.sqlbrite.SqlBrite.Query!>! defined in com.squareup.sqlbrite.BriteDatabase
public open fun createQuery(android.support.annotation.NonNull table: kotlin.String!, android.support.annotation.NonNull sql: kotlin.String!, android.support.annotation.NonNull vararg args: kotlin.String!): rx.Observable<com.squareup.sqlbrite.SqlBrite.Query!>! defined in com.squareup.sqlbrite.BriteDatabase