相关疑难解决方法(0)

Kotlin:在构造函数中初始化类属性

我创建了一个带有class属性的Kotlin类,我想在构造函数中初始化它:

public class TestClass {

    private var context : Context? = null // Nullable attribute

    public constructor(context : Context) {
       this.context = context
    }

    public fun doSomeVoodoo() {
       val text : String = context!!.getString(R.string.abc_action_bar_home_description)
    }
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,我必须使用"?"将属性声明为Nullable.符号,虽然该属性将在构造函数中初始化.将此属性声明为Nullable属性使得始终需要强制使用"!!"的NonNull值 或者用"?"提供空检查.

有没有办法避免这种情况,如果class属性将在构造函数中初始化?我想欣赏像这样的解决方案:

public class TestClass {

    private var context : Context // Non-Nullable attribute

    public constructor(context : Context) {
       this.context = context
    }

    public fun doSomeVoodoo() {
       val text : String = context.getString(R.string.abc_action_bar_home_description)
    }
}
Run Code Online (Sandbox Code Playgroud)

constructor class-attribute kotlin

16
推荐指数
2
解决办法
1万
查看次数

Kotlin - 可空场的非空吸气剂

我是Kotlin的新手,我尝试将一个小型Java项目改造成这种新语言.我在我的项目中使用mongodb,我有一个类,例如:

class PlayerEntity {

  constructor() {} //for mongodb to create an instance

  constructor(id: ObjectId, name: String) { //used in code
    this.id = id
    this.name = name
  }

  @org.mongodb.morphia.annotations.Id
  var id: ObjectId? = null

  var name: String? = null
}
Run Code Online (Sandbox Code Playgroud)

由于空构造函数,我必须将id字段标记为nullable(var id: ObjectId?).当我尝试从另一个类访问此字段时,我必须使用非null检查:thePlayer.id!!.但我的应用程序的逻辑是该id字段永远不为null(mongo创建一个Player实例并立即设置id字段).而且我不想在任何地方进行非空检查.

我试图创建一个非null的getter,但它不能编译:

var id: ObjectId? = null
    get(): ObjectId = id!!
Run Code Online (Sandbox Code Playgroud)

我也可以为id创建一些存根,并在构造函数中使用它,但这看起来像一个肮脏的黑客:

val DUMMY_ID = new ObjectId("000000000000000000000000");
Run Code Online (Sandbox Code Playgroud)

那么有解决问题的解决方法吗?

java getter nullpointerexception non-nullable kotlin

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

Kotlin是否100%支持Ormlite?(数据类)

我是Kotlin的新手,我希望将Java模型类与数据类转换,这可能吗?我的意思是Ormlite支持吗?

android ormlite kotlin

4
推荐指数
2
解决办法
1767
查看次数

使用 @Query 休眠 jpa 投影

我见过的大多数示例都使用 entityManager.createQuery 或 .createNativeQuery 等。

有没有办法让类似以下的工作?

data class SummaryDto(val employeeName: String, val employerName: String)

@Query("select e.name as employeeName, emp.name as employerName " +
            "from Employer e " +
            "inner join Employee emp on emp.employer_id = e.id ", nativeQuery = true)
    fun findSummaries(): List<SummaryDto>
Run Code Online (Sandbox Code Playgroud)

当我运行上面的代码时

我收到此错误找不到能够从类型转换的转换器 [org.springframework.data.jpa.repository.query.AbstractJpaQuery$TupleConverter$TupleBackedMap] to type [dto.SummaryDto]

这可以用 Kotlin 来完成,还是有另一种方法可以让它与基于 Hibernate JPA Annotation 的一起工作?

谢谢锡

hibernate spring-data-jpa kotlin hibernate-query

4
推荐指数
1
解决办法
1058
查看次数