小编Mib*_*bac的帖子

Kotlin中的单个感叹号

Kotlin中的单个感叹号是什么意思?我已经看过几次,特别是在使用Java API时.但我在文档和StackOverflow中都找不到它.

kotlin

108
推荐指数
5
解决办法
2万
查看次数

RealmObject的Kotlin数据类

我正在使用Kotlin和Realm编写数据类

data class AuthToken(val register: Boolean,
                     val token: String,
                     val tokenSecret: String,
                     val user: AuthUser)
Run Code Online (Sandbox Code Playgroud)

我必须将数据保存到db,所以我使用Realm来保存它.但是正如我们所知,如果我想将类保存到Realm,那么AuthToken该类必须扩展RealmObject.

这就是问题,Kotlin说数据类不能扩展类.所以我放弃数据类,只使用普通的Kotlin类作为模型,然后另一个问题来了:

Kotlin类没有吸气剂或固定剂.我们知道Realm类必须将所有属性设置为private并编写getter和setter.

现在我想知道如何解决这个问题.

android realm kotlin data-class

29
推荐指数
1
解决办法
8795
查看次数

如何从包类名字符串中获取Kotlin KClass?

如果我有一个类似的字符串"mypackage.MyClass",我如何KClass在运行时(从JVM)获得相应的?

kotlin

24
推荐指数
1
解决办法
9184
查看次数

为什么Kotlin函数使用默认参数会创建一个带有未使用参数的方法

在Kotlin中查看此示例代码:

fun foo(bar: Int = 0, baz: Int) {
    /* ... */
}
Run Code Online (Sandbox Code Playgroud)

在将其反编译为Java代码(工具 - > Kotlin - >显示Kotlin字节码 - >反编译)之后,我得到了以下代码

public static final void foo(int bar, int baz) {
}

// $FF: synthetic method
// $FF: bridge method
public static void foo$default(int var0, int var1, int var2, Object var3) {
  if ((var2 & 1) != 0) {
     var0 = 0;
  }

  foo(var0, var1);
}
Run Code Online (Sandbox Code Playgroud)

我注意到生成的Java方法有一个未使用的Object var3参数.

我有点认为它可能与类中的函数有关,但在反编译此代码时

class Foo {
    fun foo(bar: Int = 0, baz: Int) …
Run Code Online (Sandbox Code Playgroud)

kotlin

17
推荐指数
1
解决办法
1298
查看次数

Kotlin懒惰的默认属性

在Kotlin中,我如何定义var具有惰性默认值的?

例如,a val会是这样的:

val toolbarColor  by lazy {color(R.color.colorPrimary)}
Run Code Online (Sandbox Code Playgroud)

我想要做的是,有一些属性(toolbarColor)的默认值,我可以改变其他任何值.可能吗?

编辑:这是部分技巧.

var toolbarColor = R.color.colorPrimary
    get() = color(field)
    set(value){
        field = value
    }
Run Code Online (Sandbox Code Playgroud)

是否可以通过写作来缓解这种情况

var toolbarColor = color(R.color.colorPrimary)
    set(value){
        field = value
    }
Run Code Online (Sandbox Code Playgroud)

以某种方式懒惰地计算默认值?目前它不起作用,因为color()需要的Context只是稍后初始化.

android kotlin

10
推荐指数
1
解决办法
2972
查看次数

我可以引用特定的函数重载吗?

给出以下代码

fun example() {}

fun example(name: String) {}
Run Code Online (Sandbox Code Playgroud)

我如何参考特定功能?即example()example(String)

使用[example]我无法指定我想要的功能.

kotlin kdoc

10
推荐指数
1
解决办法
394
查看次数

对于JVM上的原语,Kotlin的具体类型是否不正确?

如果Kotlin函数调用为原语提供了原因,Int那么"传递的"类就是盒装基元的类,而不是未装箱的版本.

inline fun <reified T> reify() = T::class

@Test fun reified_type_doesnt_match_for_primitive() {
    assertNotEquals(Int::class, reify<Int>())
    assertNotEquals(Int::class.java, reify<Int>().java)
    assertNotEquals<Any>(Int::class, reify<Int?>())

    val nullableInt: Int? = 42
    assertNotEquals(nullableInt!!.javaClass.kotlin, reify<Int>())

    assertEquals<Any>(java.lang.Integer::class.java, reify<Int>().java)
}

@Test fun reified_type_matches_for_class() {
    assertEquals(String::class, reify<String>())
}
Run Code Online (Sandbox Code Playgroud)

这是一个错误吗?

jvm-languages kotlin

9
推荐指数
1
解决办法
898
查看次数

Kotlin Exposed不提交交易

按照Exposed提供的示例,我无法在创建它的事务之外读取创建的表/数据.我正在使用h2-in-memory数据库.

例外是:

Exception in thread "main" org.h2.jdbc.JdbcSQLException: Table "CITIES" not found; SQL statement:
Run Code Online (Sandbox Code Playgroud)

我已经添加了一个提交调用,但这没有帮助.如果我在创建数据的事务中读取数据,就像在github链接上的示例一样,它可以正常工作.这是它的简化版本:

fun main(args: Array<String>) {
    Database.connect("jdbc:h2:mem:test", driver = "org.h2.Driver")

    transaction {
        create(Cities)

        City.new {
            name = "St. Petersburg"
        }

        println("Cities: ${City.all().joinToString { it.name }}")
        //I have added this commit here
        commit()
    }
    //I want to read the data outside the transaction, but it does not work
    transaction {
        println("Cities: ${City.all().joinToString { it.name }}")

    }
}
Run Code Online (Sandbox Code Playgroud)

我该如何保存数据?

添加logger.addLogger(StdOutSqlLogger)提供以下输出:

SQL: CREATE TABLE IF NOT EXISTS …
Run Code Online (Sandbox Code Playgroud)

transactions kotlin kotlin-exposed

7
推荐指数
2
解决办法
1694
查看次数

反射调用函数并使用默认参数

鉴于以下功能

fun function(x: Int = 12) {
    println("x = $x")
}
Run Code Online (Sandbox Code Playgroud)

如何使用反射调用它而不指定x(或以某种方式使用默认值,而不是硬编码)?

kotlin kotlin-reflect

6
推荐指数
1
解决办法
791
查看次数

什么是@InlineOnly注释?

经常 看到 @InlineOnly注解浏览科特林的STDLIB时.据我所知,注释只发生在inline功能上.这个注释的目的是什么?inline功能总是内联不是很明显吗?它的文档并没有多大帮助

指定不应在没有内联的情况下直接调用此函数

是否可以调用内联函数而不是内联函数?

kotlin

6
推荐指数
1
解决办法
926
查看次数