首页
学习
活动
专区
工具
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.6K40

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?

57710

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?

70540

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 Maps:五个基本函数

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

2.3K10

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独特魅力

目录 剖析方法结构 函数 变量 字符串模板 注释 自定义访问器 源码布局:目录和包 表示和处理选择:枚举和"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.6K30

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

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

87010

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

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

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

78420

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.2K30

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 对象。

92610

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.7K30

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 有一定了解

74520

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

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

17410

Kotlin 程序设计》第三章 Kotlin 类型系统第三章 Kotlin 类型系统基本数据类型2.字符类型CharKotlin类型系统参考资料

Kotlin 处理数字某种程度上接近 Java,但是并不完全相同。例如,对于数字没有隐式拓宽转换( Java 中 int 可以隐式转换为long),另外有些情况字面值略有不同。...1.3字面常量 Kotlin数字常量可以用十进制、十六进制、指数形式小数、二进制但是没有八进制。... — Double类型数组 这些类和 Array 并没有继承关系,但是它们有同样方法属性集。...但是Kotlin中一个都没有,取而代之是两种其他实现:: declaration-site协变 类型预测(type projections) 首先,让我们想一下,为什么Java需要如此难以理解通配符...你只能使用String作为参数List上调用方法( 你可以调用add(String)或者 set(int, String))。

1.3K30
领券