首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

“没有提供数组访问的set方法”--为什么在Kotlin中会发生这种情况?

在Kotlin中没有提供数组访问的set方法是因为Kotlin语言设计的初衷是为了提供更安全、更简洁的编程体验,并且在语法上与Java有所区别。Kotlin中的数组是通过Array类来表示的,而Array类并没有提供set方法来直接修改数组中的元素。

Kotlin中的数组元素可以通过索引直接赋值来修改,例如:

代码语言:txt
复制
val array = arrayOf(1, 2, 3)
array[0] = 4

上述代码中,我们通过索引[0]来访问数组的第一个元素,并将其修改为4。

Kotlin提供了更简洁的语法来创建和操作数组,例如使用arrayOf()函数来创建数组,使用get()函数来访问数组元素。这样的设计使得代码更易读、更易维护。

在Kotlin中,还可以使用set()函数来修改数组元素,但是这个函数是用于可变集合类(MutableList)的,而不是用于数组。如果需要频繁修改数组元素,建议使用可变集合类而不是数组。

总结起来,Kotlin中没有提供数组访问的set方法是为了提供更安全、更简洁的编程体验,并且可以通过索引直接赋值来修改数组元素。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Bruce Eckel:我最喜欢Python,Kotlin或将取代Java(附演讲全文+PPT)

这个地方list我们没有给它任何具体类型,编译器能够推测它类型是什么,大多数情况下我们都是可以这样去做,不用告诉他类型是什么,有一种例外就是方法参数里面我们这个地方是要标示出它类型。...这是又一个类,叫JetPack,这个例子里面主要想为大家展示Kotlin也是支持Private、public和protected这三种访问符,你默认情况下,如果你不做任何声明它是一个public变量...而这个最后返回结果可以是一个list,也可能是一个数组,比如这个数组情况下,接下来我们调用sort这个方法把它进行排序。 ?...同时,我觉得Google那边也是致力于用单一源代码提供给更多平台,我不知道这件事情什么时候会发生,或者怎么发生,但是我非常期待这件事情。...当然,现在情况发生了一点改变,我觉得Kotlin是一门非常好语言,所以现在Kotlin是我第二喜欢。我已经可以想像出来一个画面,我用Kotlin写一些我项目,但是目前只是一个想象东西。

1.7K40

Effective Kotlin 译文:Chapter3-Item24-泛型型变

型变修饰符安全性 Java 中,数组是协变,很多消息来源表示,这是为了方便在使用数组作为参数时候,可以实现一些形如 sort 方法,可以支持对不同类型数组做相同排序逻辑。...= 'B'; // 编译没有问题,但是运行时抛出 ArrayStoreException Kotlin 中,数组是不型变,所以以上问题就不存在了。...box.set(42) // Int 也是 Any 子类,可以传入,离谱,我是狗窝,你给我塞一个 Int 因此,为了避免这种情况发生Kotlin 在编译时禁止了这种行为:Kotlin 禁止公有的输入位置使用协变类型参数...Kotlin List, Kotlin 中, List 只提供了可读方法,因此 List 声明处定义成了协变(使用 out) 对应,逆变类型参数如果放在公有的输出位置,也会存在问题...因此,为了避免这种情况发生Kotlin 在编译时禁止了这种行为:Kotlin 禁止公有的输出位置使用逆变类型参数: class Box { var value: T?

59810
  • Effective Kotlin 译文:Chapter3-Item24-泛型型变

    型变修饰符安全性 Java 中,数组是协变,很多消息来源表示,这是为了方便在使用数组作为参数时候,可以实现一些形如 sort 方法,可以支持对不同类型数组做相同排序逻辑。...= 'B'; // 编译没有问题,但是运行时抛出 ArrayStoreException Kotlin 中,数组是不型变,所以以上问题就不存在了。...box.set(42) // Int 也是 Any 子类,可以传入,离谱,我是狗窝,你给我塞一个 Int 因此,为了避免这种情况发生Kotlin 在编译时禁止了这种行为:Kotlin 禁止公有的输入位置使用协变类型参数...Kotlin List, Kotlin 中, List 只提供了可读方法,因此 List 声明处定义成了协变(使用 out) 对应,逆变类型参数如果放在公有的输出位置,也会存在问题...因此,为了避免这种情况发生Kotlin 在编译时禁止了这种行为:Kotlin 禁止公有的输出位置使用逆变类型参数: class Box { var value: T?

    73740

    Kotlin —— 这次入门就不用放弃了

    注:类似于RxJava对数组处理,Kotlin提供了flatMap方法,具体可以自己了解。...} //注:此处toast方法Kotlin默认已经提供扩展方法 5. 互操作性 Kotlin调用Java和Java调用Kotlin与之前Java 类之间调用方式没有太大差别,不详细介绍。...先看Java,Java中,实现一个单例,我们需要: 保留一个单例对象静态实例 提供一个类方法让外界访问唯一实例 构造方法采用private修饰符 而在Kotlin中,一个修饰符就解决了。...而在Kotlin中,可以使用reified,告别Class。 reified意思是具体化。作为Kotlin一个方法泛型关键字,它代表你可以方法体内访问泛型指定JVM类对象。...重写期间没有发生架构更改,因此重写之前和之后测试编译时间应该很好地了解Java和Kotlin之间构建时间差异。我写了一个shell来重复执行gradle。所有测试连续进行10次。

    1.6K30

    kotlin和java语言_我希望Java可以从Kotlin语言中窃取10个功能

    3.简化检查实例    如果您愿意,这实际上是switchinstanceof。 某些人可能会声称这些东西是邪恶,糟糕OO设计。 Nja nja。 我说,这种情况时有发生。...与大多数其他语言一样,我们可以使用方括号访问数组元素:    int[] array = { 1, 2, 3 }; int value = array[0];   还要注意一个事实,我们Java中拥有数组初始化文字...那么,为什么不同时允许使用相同语法访问地图元素呢?    ...因此,此语法不仅可以与JDK映射一起使用,而且可以与公开基本get()和set()方法任何库一起使用。    ...当然, default这种不规则用法很奇怪,因为默认情况下Java 8中没有重复使用它,但是我想Java总是需要额外语法,以便开发人员可以更好地感觉自己打字手指,使他们活着。 没关系。

    1.1K00

    Kotlin Maps:五个基本函数

    因此,熟悉它们是学习一门新语言必要步骤。 Kotlin对开箱即用maps提供全面支持。首先,您可以本地使用Java 集合框架,这是业内最知名且久经考验框架之一。... Kotlin 中有第二个接口?MutableMap,它提供写操作。每当您需要修改maps内容时,请使用此方法。完成后,最好将其转换为不可变映射以防止进一步修改。...3" 等等,那里发生了什么?...没有调用get方法。它看起来就像访问一个数组!好吧,它看起来不像,但我们正在调用*get*方法。我们正在使用 Kotlin 内置?运算符重载,它会自动将类似数组访问转换为使用get方法。...但是,这种方法有一个变体。相反,您可以同时提供键和值。在这种情况下,只有当键存在且值与您提供值匹配时,映射才会删除该对。

    2.4K10

    从点滴基础探究Kotlin独特魅力

    目录 剖析方法结构 函数 变量 字符串模板 注释 自定义访问器 源码布局:目录和包 表示和处理选择:枚举和"when" 迭代事物:"while"和"for"循环 异常 综上(熟悉kotlin,可以直接跳转至综上...,没有必要放在类中 ④ 数组就是类.kotlin没有声明数组类型语法 ⑤ kotlin标准库含有针对java标准库函数进行简洁包装:println就是一个 ③ 没有分号 1 函数 带有两个 Int...fun rgb() = (r * 256 + g) * 256 + b // 给枚举类定义一个方法 } 说明: ① 枚举常量声明时候,必须提供常量属性值. ② 这个例子展示了 kotlin...说明: ① 这是迭代一个带步长数列,它允许跳过一些数字. ② 步长也可以负数,这种情况下数列是递减而不是递增. ③ 100 downTo 1 : 递减数列(步长为-1).step 把步长绝对值变成了...(line) } catch (e: NumberFormatException) { // 异常类型右边 return null // 发生异常情况下使用

    2.7K30

    新年 Flag 以及论坛一个所谓 Kotlin 不完全兼容 Java 问题

    一月份实在太忙了,公司忙,回家还忙,群里开玩笑说公众号都要长草了,这让我十分痛心。这种状态大约会持续到 2月底,3月份我一定会回归。 下面我们说我们今天正题: 1....} 这个与绝大多数合成属性情况还不一样,如果是合成属性,通常我们也可以直接访问对应 get/set 方法。...实际上我们自己定义类如果不继承存在 Kotlin 到 Java 映射关系类型,几乎不会遇到类似的问题。 3. 真的没有办法通过 Kotlin 实现访问吗?...这个访问过程实际上也没有什么额外开销,尽管看上去似乎用了反射,但根本不需要引入反射包,实际上也不会通过反射进行访问。...小结 这种情况,ApiException 不是 Kotlin 友好类型,对于这样类型,或者说类似的 Java 质量并不怎么好代码,以及典型 raw 类型代码,建议用 Java 去访问,或者进行适当包装再交给

    90410

    Kotlin 极简教程 》第6章 泛型

    本章我们来一起学习一下Kotlin泛型相关知识。 6.1.1 为什么要有类型参数 我们先来看下没有泛型之前,我们集合类是怎样持有对象Java中,Object类是所有类根类。...这种实现方式,存在问题有两个: 向集合中添加对象元素时候,没有对元素类型进行检查,也就是说,我们往集合中添加任意对象,编译器都不会报错。...但是不能调用setFirst方法,因为编译器无法确定参数类型。 通配符类型系统中具有重要意义,它们为一个泛型类所指定类型集合提供了一个有用类型范围。...Stack对象stack,src有Iterable与 Iterable; 调用pushAll方法时会发生type mismatch错误,因为Java中泛型是不可变...(si.next()); } } } 6.3 Kotlin泛型特色 正如上文所讲 Java 泛型里,有通配符这种东西,我们要用?

    1.7K30

    Kotlin 1.4 新特性预览

    不过,大家使用 Kotlin 开发时,一定会发现有些情况下明明类型是很确定,编译器却一定要让我们显式声明出来,这其实就是类型推导算法没有覆盖到场景了。...例如以下代码 Kotlin 1.3 当中会提示类型不匹配问题: val rulesMap: Map<String, (String?)...当然,有些开发者经常会抱怨类似下面的这种情况: var x: String? = null fun main() { x = "Hello" if(x !...请一定要注意,这种情况不是类型推导算法问题,而是 x 类型确实无法推导,因为对于一个共享可变变量来讲,任何前一秒判断都无法作为后一秒依据。...因此对于属性代理类 get 和 set 函数实现为内联函数情形,编译器可以确切分析出 KProperty 是否被用到,如果没有被用到,那么就不会生成这个 KProperty 对象。

    97710

    Android数据库高手秘籍(十一),LitePal支持事务功能了

    举个例子,GoogleRoom就完全没有提供异步操作数据库接口,但是默认情况下Room还强制要求你必须在非主线程进行数据库操作,否则就会崩溃。...一方面是觉得,像Room这种Google官方数据库框架都没有提供将数据库存储到外置SD卡功能,LitePal为什么要多做这件事情。另一方面又觉得,数据库难以调试这确实是一个开发者痛点。...但是刚才有提到,LitePalsave方法中会解析当前对象包含数据、字段、关联关系等信息。...为了处理这种情况,LitePal 3.1.0版本当中特意增加了saveAll方法返回值。...另外,3.1.0版本当中,我还为Kotlin提供了saveAll方法专属语法糖,如果你项目使用正是Kotlin语言的话,可以用如下写法来调用saveAll方法: val personList:

    83920

    Kotlin:04-基本数据类型详细介绍

    所以,kotlin给我们提供了如下转换方法方法名 作用 toByte() 将数据转为Byte类型 toShort() 将数据转为Short toInt() 将数据转为Int toLong() 将数据转为...瞧,没有报错,这是因为类型推断作用,这种情况下,b 类型就是 a 类型。 另外,在下面的代码中,也是一种隐式类型转换模式。...不做过多解释了 五、数组 Kotlin 中使用 Array 类来表示数组类型 它定义了 get() 和 set() 函数和 size 属性,以及一些其他有用成员 函数,如: class Array<T...创建数组并初始化元素 使用该方式创建数组可以通过 set 方法修改元素,但是不能增加元素!...0]) //打印0索引元素 } (2)、 arrayOfNulls() 创建指定大小数组 使用该方式创建数组时需要指定数组元素个数以及元素类型,然后可以通过set 方法设置元素,但是元素个数不能超过设定

    1.8K30

    Kotlin入门(4)声明与操作数组

    上一篇文章介绍了基本变量类型Kotlin用法,不过这只针对单个变量,如果要求把一组相同类型变量排列起来,形成一个变量数组,那又该如何声明和操作呢?...与Kotlin有以下区别: 1、Kotlin另外提供了新整型数组类型即IntArray; 2、分配一个常量数组Kotlin调用是intArrayOf方法,并不使用new关键字; 推而广之,其它类型数组也各有自己数组类型...:Array = arrayOf("How", "Are", "You") 这种字符串数组声明方式是不是很熟悉?...关于获取指定位置数组元素,Java通过方括号加下标来获取,比如“int_array[0]”指的是得到该数组第一个元素;Kotlin也能通过方括号加下标来获取指定元素,不过Kotlin还拥有get和set...两个方法,通过get方法获取元素值,通过set方法修改元素值,看起来就像在操作ArrayList队列。

    1.3K30

    ThreadLocal 原理及问题,一网打尽!

    而 ThreadLocal 为每个线程都提供了变量副本,使得每个线程某一时间访问并非同一个对象,这样就隔离了多个线程对数据数据共享。...threalLocals 对象 table 数组,因此不同线程中访问同一个 ThreadLocal set() 和 get() 方法,他们对 ThreadLocal 所做 读 / 写 操作权限仅限于各自线程内部...如果这次回收还没有足够内存,才会抛出内存溢出异常。 JDK 1.2 之后,提供了 SoftReference 类来实现软引用。...new 出一个数组 可以看到内存实际使用控制 25M 左右:因为每个任务中会不断 new 出 一个 5M 数组,5*5=25M,这是很合理。...使用线程池+ ThreadLocal 时要小心,因为这种情况下,线程是一直不断重复运行,从而也就造成了 value 可能造成累积情况

    21610

    Kotlin学习之路(2)数据类型

    Kotlin语言中,类体部分 枚举 方法体,条件语句中条件执行体,与循环语句循环体也都放在代码块中。 (2) 标识符规则 区分大小写:Myname 与 myname 是两个不同标识符。...,java中split返回是Sting数组,但是Kotlin中split返回则是Sting类型队列,List var origin: String = "12345678.90...(1,2,3) 两者相互对比 Kotlin提供了新整型数组类型—IntArray,分配一个常量数组时候Kotlin没有使用关键字new,而是调用intArrayOf方法 var...Kotlin中也可以通过下标的方式获取对应元素,不过Kotlin要比Java多出两个方法 get set,通过get获取元素值,通过set方法修改元素值,感觉就像在操作ArrayList队列一样...,以及标识符规则 (4) 了解各种类型数组声明方式以及数组变量常用方法 (5) 对Kotlin Null 有一定了解

    77420

    面试 Notes|2021 年秋季 Android 求职记。。。

    假设用户设备上出现崩溃闪退情况,你是如何能了解到这个情况呢? OkHttp 和系统提供网络访问框架有什么区别? RecyclerView 和 ListView 区别。...判断下如果在方法上添加 final 会出现什么情况? Java 中 switch 中 case 可以用 String 吗? 如何访问对象私有方法Kotlin拓展函数用过哪儿些?...同步锁修饰静态方法和普通方法会有什么区别? 两个线程竞争会出现什么情况? 假如没有竞争到线程会释放 CPU 吗? sleep 方式会释放 CPU 么? sleep 可以中断吗?...一线程中会有几个 Looper? ThredLocal 可以存放哪儿些数据? ThredLocal 实现机制。 单例模式实现方式有哪儿些? 饿汉和懒汉区别? 懒汉模式多线程情况下会有什么问题?...Kotlin 中会写 try catch 吗?或者说 Kotlin 中操作 IO 流回去写 try catch 吗?

    2K00
    领券