Tag: kotlin null safety

null to listOf(),not null to listOf(value)in Kotlin in one liner?

让f()返回一个可为空的值。 我想要做的是这个 如果f()为null,则获取一个空列表, 否则,如果f()不为null,则获取单个项目value的列表。 在斯卡拉,我们可以做这样的事情: Option(f()).toList 或更详细地说 Option(f()).map(v => List(v)).getOrElse(List.empty) 在Kotlin中,没有Option (假设没有Funktionale库),并且null在Scala中不具有toList()不像( None: Option )。 我们有Elvis操作符,但是null将会在listOf()函数内部,所以会是 listOf(f() ?: /* What can I do here? */) 我们想要的null是listOf(/*no argument */) ,但是Elvis操作符需要一个参数,所以listOf(f() ?: )将导致编译错误。 至少我们能做到 val v = f() if (v == null) listOf() else listOf(v) 但它是一个两班轮船。 有这个表达吗? 在那里我将使用这个表达式是在类的主要构造函数的默认参数,所以如果它不是一个班轮,它将被括在方括号,所以这样的事情: class A( val p1: List<V> = run { val […]

最好的方式来null检查kotlin?

我应该使用double =还是triple = ? if(a === null) { //do something } 要么 if(a == null) { //do something } 同样的“不等于”: if(a !== null) { //do something } 要么 if(a != null) { //do something }

我如何使用Kotlin中的默认构造函数参数值实例化一个对象?

我有数据类与默认值。 data class Project( val code: String, val name: String, val categories: List<String> = emptyList()) 当某些值为null时,Java反射无法实例化类。 我得到例外 java.lang.IllegalArgumentException: Parameter specified as non-null is null: method Project.<init>, parameter categories 这是因为java.lang.reflect.Constructor<T>.instantiateClass方法需要非空的参数。 我有类型信息,我有构造函数的定义,但我不知道如何调用构造函数,以便它使用默认值(值来自数据库和categories可以为null )。 Kotlin有没有办法达到这个目的?

kotlin反布尔安全铸造

比方说,我有一个对象响应。 现在我想检查一个布尔变量,成功,响应下做一个早期的回报是响应不成功。 if(response == null || !response.success){ return; } //Java version 现在我想用Kotlin的无效安全检查如下 if(response?.success ?: true){ return } 如果我没有错,如果任何一个响应或成功为空,我们将在if条件中返回true。 但是,如果response.success不为null并且等于true,我们仍然会从函数返回,这不是我想要的。 我如何纠正这种情况?

Kotlin无效安全?

让我们有一个函数foo和一个类Bar : fun foo(key: String): String? { // returns string or null } class Bar(x: String, y: String) { // … } 现在,让我们有这个代码: val x = foo("x") val y = foo("y") if (x.isNotEmpty() && y.isNotEmpty()) return Bar(x, y) 问题是这个代码不会编译。 因为它需要Bar(x!!, y!!) 。 但是,当我把它的内容替换功能, !! 不需要。 val x = foo("x") val y = foo("y") if ((x […]

如何在基本类型中使用kotlin中的@Autowired或@Value等Spring注解?

使用类似Spring的注释自动装配非基元 @Autowired lateinit var metaDataService: MetaDataService 作品。 但是这不起作用: @Value("\${cacheTimeSeconds}") lateinit var cacheTimeSeconds: Int 有一个错误: 基元类型不允许使用lateinit修饰符。 如何autotire primitve属性到kotlin类?

在Kotlin项目中使用的传统Java库中保持零安全

假设我在旧/旧Java库中有特定的代码: public class JavaClass { private String notNullString; private String nullableString; private String unannotatedString; public JavaClass(@NotNull String notNullString, @Nullable String nullableString, String unannotatedString) { this.notNullString = notNullString; this.nullableString = nullableString; this.unannotatedString = unannotatedString; } @NotNull public String getNotNullString() { return notNullString; } @Nullable public String getNullableString() { return nullableString; } public String getUnannotatedString() { return […]

如何在Kotlin中习惯性地测试非空,非空字符串?

我是Kotlin的新手,我正在寻找建议,将下面的代码改写成更优雅的方式。 var s: String? = "abc" if (s != null && s.isNotEmpty()) { // Do something } 如果我使用下面的代码: if (s?.isNotEmpty()) { 编译器会抱怨 Required: Boolean Found: Boolean? 谢谢。

如何将lateinit Kotlin属性设置为null

下面的类有一个非常独特的生命周期,这要求我暂时lateinit属性 class SalesController : BaseController, SalesView { @Inject lateinit var viewBinder: SalesController.ViewBinder @Inject lateinit var renderer: SalesRenderer @Inject lateinit var presenter: SalesPresenter lateinit private var component: SalesScreenComponent override var state = SalesScreen.State.INITIAL //only property that I want to survive config changes fun onCreateView(): View { /** lateinit variables are set here */ } fun onDestroyView() […]

在超类中需要'init块引发IllegalArgumentException

早安Kotlin大师。 我有一个继承结构,其中抽象的超类实现了一些共享的数据检查。 编译器不会抱怨,但在执行时,JVM将引发IllegalArgumentException 代码 fun main(args: Array<String>) { val foo = Child("NOT_BLANK") } abstract class Parent( open val name: String = "NOT_BLANK" ) { init { require(name.isNotBlank()) { "Firstname must not be blank" } } } data class Child( override val name: String = "NOT_BLANK" ) : Parent( name = name ) 异常看起来如下 Exception in […]