当前位置: 首页 > 知识库问答 >
问题:

怎么得到任何类的?Kotlin的变量?

颜英博
2023-03-14
    override fun equals(other: Any?): Boolean {
        return this::class == other::class && ...

    }

不幸的是它发誓

Expression in a class literal has a nullable type 'Any?', use !! to make the type non-nullable

但我也想与nulls进行比较。光荣的“零安全”呢?他们为了反思而忘了?我没有找到?::运算符什么的。

共有1个答案

方宏才
2023-03-14

想想这个。在stringstring之间,类实际上没有什么不同,只是类型不同而已。您不能对可为null的类型调用该运算符,因为这可能意味着您对null调用该运算符,这将导致nullPointerException:

val x: String? = null
x!!::class //throws NPE

在作用域函数let的帮助下,您可以确保它不是null并使用类的文字语法:

return other?.let { this::class == other::class } ?: false

Elvis运算符?:通过使表达式为false(不相等)来处理为null的情况。

 类似资料:
  • 在google protobuf v3中,有一种类型可以让你序列化识别消息的名称/url(https://developers.google.com/protocol-buffers/docs/proto3#any, https://github.com/google/protobuf/blob/master/src/google/protobuf/any.proto). 有没有可能描述这个构造并

  • 大部分现代语言使用某些方法去解决了这个问题,Kotlin的方法跟别的相似的语言比是相当另类和不同的。但是黄金准则还是一样:如果变量是可以是null,编译器强制我们去用某种方式去处理。 指定一个变量是可null是通过在类型的最后增加一个问号。因为在Kotlin中一切都是对象(甚至是Java中原始数据类型),一切都是可null的。所以,当然我们可以有一个可null的integer: val a: In

  • 本文向大家介绍让网页的字体变得清晰,变细用CSS怎么做?相关面试题,主要包含被问及让网页的字体变得清晰,变细用CSS怎么做?时的应答技巧和注意事项,需要的朋友参考一下 让文字变细有两个要素: font-weight + font-family font-weight 来控制粗细还是需要看对应的字体有没有对应的变种字体。因此这就和 font-family 相关。 -webkit-font-smoot

  • 我有财产课: 还有一种方法: 在类的构造函数我有: 为什么当我从object按键调用函数时。我收到一条未定义的消息,为什么变量在内部不可用:

  • 本文向大家介绍Linux下怎么得到一个文件的100到200行相关面试题,主要包含被问及Linux下怎么得到一个文件的100到200行时的应答技巧和注意事项,需要的朋友参考一下 参考回答: sed -n '100,200p' inputfile awk 'NR>=100&&NR<=200{print}' inputfile head -200 inputfile|tail -100

  • 不深入Kotlin语言(我们会在下一章再去学习),这里有一些Java中没有的有趣的特性: 易表现 通过Kotlin,可以更容易地避免模版代码因为大部分的典型情况都在语言中默认覆盖实现了。举个例子,在Java中,如果我们要典型的数据类,我们需要去编写(至少生成)这些代码: public class Artist { private long id; private String na