Tag:

有没有更好的方式在列表中过滤null?

我这样做过滤空值列表: val myList: List<Any?> = […] myList.filter { it != null }.map { it!! } myList.get(0).xxx // don't need to write "?." 如果我不添加map ,列表不会成为List<…> 。 有没有更好的方法来做到这一点?

用于处理非空对象和非空字符串表示的Kotlin成语

我有一个空的属性(一个Java对象),知道如何将自己转换为一个字符串,如果这种表示不是空的,我想做一些事情。 在Java中,这看起来像: MyObject obj = … if (obj != null) { String representation = obj.toString(); if (!StringUtils.isBlank(representation)) { doSomethingWith(representation); } } 我试图找到把这个转换成Kotlin的最习惯的方式,我有: with(obj?.toString()) { if (!isNullOrBlank()) { doSomethingWith(representation) } } 但是对于这样一个简单的操作,感觉还是太多了。 我有这样一种感觉,即let我,可以和我在一起when ,可以把它缩短到稍微短一些。 步骤是: 如果对象(A)不为空 如果对象(A)的字符串表示(B)不是空白的 (B) 我试过了: when(where?.toString()) { isNullOrBlank() -> builder.append(this) } 但(1)失败: Unresolved reference. None of the following candidates is applicable because […]

如何更有效地使用@Nullable和@Nonnull注释

我可以看到@Nullable和@Nonnull注释有助于防止NullPointerException但是它们不会传播很远。 这些注释的有效性在一层间接后完全消失,所以如果只添加一些注释,它们就不会传播很远。 由于这些注释没有被很好地执行,所以存在假设用@Nonnull标记的值不为空并且因此不执行空检查的危险。 下面的代码会使用@Nonnull标记的参数为null而不会引发任何投诉。 它在运行时抛出一个NullPointerException异常。 public class Clazz { public static void main(String[] args){ Clazz clazz = new Clazz(); // this line raises a complaint with the IDE (IntelliJ 11) clazz.directPathToA(null); // this line does not clazz.indirectPathToA(null); } public void indirectPathToA(Integer y){ directPathToA(y); } public void directPathToA(@Nonnull Integer x){ x.toString(); // do stuff to x […]

可空类型的层次结构中的地方是什么?

你可以从类型B继承类型A ,但是每当你定义类型A你将得到类型A? (可空)免费。 但是它究竟在哪里呢? A? 从A还是其他方式继承? 我问这个是因为我对这样的代码感到困惑: open class Foo { fun foo() : Int { return 0; } } fun test<T : Foo?>(x:T) : Int { return x.foo() // (@) } fun main(args: Array<String>) { println(test<Foo?>(null)) } 我不明白为什么行(@)编译? 或换句话说,我不明白可空的类型层次,因为直到现在我虽然T为Foo? 或从它派生的任何类型。 你可以从可为空的类型中获得不可空的类型,那么它会是什么意思? 对不起,如果这是明显的,我只是在学习Kotlin。 (@)为可空类型,它应该是x!!.foo() 。

在泛型类中有可空的运算符是否有效?

Kotlin有漂亮的功能( ?.和!!. )处理可空类型。 但是这个只是描述了我 – 如果你不知道你是在处理可为空还是不可空的类型呢? 如果你有泛型类MyClass<T> ,那么你只是有一些类型T ,就是这样。 Kotlin是否允许将“空”运算符应用于泛型类型(这里是T ),该类型是否可以在类(如T? )中是可空的以及如果类将使用可空类型实例化 – 如MyClass<String?> 。 在MyClass类型中是否会导致可为空(如C ++中指针指针 – 类型为**std::string )?

Android kotlin onCreate(savedInstanceState:Bundle?)导致IllegalArgumentException

第一个Activity不会启动Bundle? 。 class FirstActivity : Activity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) } } 引起:java.lang.IllegalArgumentException:指定为非null的参数为null:方法kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull,参数包 这个错误应该发生在override fun onCreate(savedInstanceState: Bundle) 不过,我修正了override fun onCreate(savedInstanceState: Bundle?)

Kotlin:消除List中的空值(或其他功能转换)

问题 在Kotlin型系统中解决这种零安全限制的惯用方法是什么? val strs1:List<String?> = listOf("hello", null, "world") // ERROR: Type Inference Failed: Expected Type Mismatch: // required: List<String> // round: List<String?> val strs2:List<String> = strs1.filter { it != null } 这个问题不仅仅是消除空值,而且是为了使类型系统认识到通过转换从集合中删除了空值。 我不想循环,但如果这是最好的办法。 变通 以下编译,但我不知道这是做到这一点的最好方法: fun <T> notNullList(list: List<T?>):List<T> { val accumulator:MutableList<T> = mutableListOf() for (element in list) { if (element != null) { accumulator.add(element) […]