安卓 Kotlin 面试题 21-30

🔥 21、 Kotlin 中的"open"和"public"有什么区别?🔥

open 关键字的意思是"为扩展而开放" 。

类上的 open 注释与 Java 的相反 final:它允许其他人从该类继承。

如果您不指定任何可见性修饰符,则默认使用public,这意味着您的声明将在任何地方可见。

如果没有明确指定其他内容,则public是默认值。

🔥 22.、Kotin "const"和"val"有什么区别?🔥

consts 是编译时常量。这意味着它们的值必须在编译时分配,不像vals,它可以在运行时完成。

这意味着,const永远不能将 s 分配给函数或任何类构造函数,而只能分配给 aString或原语。

css 复制代码
例如:
const val foo = complexFunctionCall() //Not okay
val fooVal = complexFunctionCall() //Okay
const val bar = "Hello world" //Also okay

🔥 23、 Kotlin List 和 Array 类型有什么区别?🔥

使用方面的主要区别在于Arrays具有固定大小,而(Mutable)List可以动态调整其大小。此外Array是可变的,而List不是。

此外,还有kotlin.collections.List一个由 实现的接口java.util.ArrayList。kotlin.collections.MutableList当需要允许修改项目的集合时,它也被扩展为使用。

在 jvm 级别Array上由数组表示。List另一方面,java.util.List因为在 Java 中没有可用的不可变集合等价物,所以由表示。

🔥 24、 简述Kotlin 中的 Elvis 运算符?🔥

Elvis 运算符是许多编程语言的一部分,例如 Kotlin 以及 Groovy 或 C#。Elvis 运算符是省略了第二个操作数的三元运算符。

x ?: y // yields `x` if `x` is not null, `y` otherwise.

如果x不为空,则返回。如果为 null,则将y返回 。

🔥 25、请用 Kotlin 重写这段代码 ?🔥

css 复制代码
你能用 Kotlin 重写这段 Java 代码吗?

public class Singleton {
    private static Singleton instance = null;
    private Singleton(){
    }
    private synchronized static void createInstance() {
        if (instance == null) {
            instance = new Singleton();
        }
    }
    public static Singleton getInstance() {
        if (instance == null) createInstance();
    return instance;
    }
}
css 复制代码
 object Singleton

🔥 26、如何建议在 Kotlin 中创建常量?🔥

css 复制代码
在 Kotlin 中,如果你想创建应该在类中使用的局部常量,那么你可以像下面这样创建它:

val MY_CONSTANT_1 = "Constants1"
// or
const val MY_CONSTANT_2 = "Constants2"
像,用关键字val定义的变量是不可变的。const这里的区别在于const 用于在编译时已知的变量。

还要避免使用伴随对象。在后台,为可访问的字段创建了 getter 和 setter 实例方法。
调用实例方法在技术上比调用静态方法更昂贵。而是在 中定义常量object:

object DbConstants {
    const val TABLE_USER_ATTRIBUTE_EMPID = "_id"
    const val TABLE_USER_ATTRIBUTE_DATA = "data"
}

🔥 27、Koltin 可以互换使用 IntArray 和 Kotlin 中的 Array 吗?🔥

Array是一个Integer\[\]在引擎盖下,IntArray而是一个int\[\]。

这意味着当您将 an 放入Int中时Array,它将始终被装箱(特别是,带有Integer.valueOf()调用)。在 的情况下IntArray,不会发生装箱,因为它会转换为 Java 原始数组。

所以我们不能互换使用它们。

🔥28、 阐述什么是 Kotlin double-bang (!!) 运算符?🔥

css 复制代码
非空断言运算符 !! 将任何值转换为非 null 类型,KotlinNullPointerException如果值为 null,则引发异常。

考虑:

fun main(args: Array) {
    var email: String?
    email = null
    println(email!!)
}
此运算符应在开发人员保证的情况下使用 - 它允许您 100% 确定其值不为空。

🔥 29、 函数中Unit-return的目的是什么?为什么 VALUE 在那里?这个价值是多少?🔥

css 复制代码
fun printHello(name : String?) : Unit {
    if (name != null)
        print("Hello, $name!")
    else
        print("Hi there!")
    // We don't need to write 'return Unit.VALUE' or 'return', although we could
}
 

目的与 C 或 Java 相同void。只有 Unit 是正确的类型,所以它可以作为泛型参数等传递。

为什么我们不称它为"Void":因为"void"这个词的意思是"无",还有另一种类型,Nothing即"根本没有价值",即计算没有正常完成(永远循环或抛出一个例外)。我们无法承受意义的冲突。

为什么 Unit 有值(即与 Nothing 不同):因为通用代码可以顺利运行。如果您为通用参数 T 传递 Unit,则为任何 T 编写的代码都需要一个对象,并且必须有一个对象,即 Unit 的唯一值。

如何访问 Unit 的值:因为它是一个单例对象,所以说Unit

UNIT实际上包含有价值的信息,它基本上只是意味着"完成"。它只是将信息返回给调用者,即方法已完成。

🔥 30、Koltin 如何使用"apply"重构这段代码?🔥

css 复制代码
考虑:

class Message(message: String, signature: String) {
    val body = MessageBody()

    init {
        body.text = message + "\n" + signature
    }
}
您是否看到任何可以进行的重构?
css 复制代码
重构后的结果

class Message(message: String, signature: String) {
    val body = MessageBody().apply {
        text = message + "\n" + signature
    }
}
相关推荐
tongyiixiaohuang16 小时前
WMS已发货状态反写金蝶云星空:单策略实战教程
android
好的佩奇17 小时前
Dart 之类修饰符
android·flutter·dart
alexhilton18 小时前
用Konsist与Lint强制执行设计系统契约
android·kotlin·android jetpack
唐青枫21 小时前
Kotlin Delegation 委托详解
kotlin
北京自在科技1 天前
谷歌安卓 Gemini 迎来界面改版,Find Hub 接入 Gemini 支持物品记忆查找
android·安卓
YB13751 天前
Jetpack Compose 动画Modifier.animateItem()
android
2401_885885041 天前
巴林语音通知接口如何对接?系统告警语音API接入教程
android·前端·网络·python·语音识别
收纳过往1 天前
数据库加索引的时机:慢查询日志说话
android·开发语言·数据库·python·低代码·rxjava
狂热开发者1 天前
车载中控要给鸿蒙用户,能不能和 Android 共用一个二维码?
android·华为·harmonyos
.Bryce.1 天前
T2-LLM评测不等于Agent评测
android·java·人工智能·后端·gpt·agent·1024程序员节