使用vararg调用Java函数而不是在Kotlin中编译

时间:2015-07-03 09:04:16

标签: 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 String sql, @NonNull String... args)

然后在kotlin我只想打电话给我,这对我来说似乎完全有效:

db.createQuery("users", "select * from users")

但是编译器说

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

我读过Kotlin和vararg的Java方法有一些插入问题,有没有办法解决这个问题而不使用java类作为桥梁?

1 个答案:

答案 0 :(得分:0)

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

也许应该改进错误信息!