在Java中,我们可以使用以下代码:
List<String> a = new ArrayList<>();
我们怎么能在Kotlin那样做呢?
答案 0 :(得分:1)
您可以在下面看到列表的基本用法和设置类型:
val numbers: MutableList<Int> = mutableListOf(1, 2, 3)
val readOnlyView: List<Int> = numbers
println(numbers) // prints "[1, 2, 3]"
numbers.add(4)
println(readOnlyView) // prints "[1, 2, 3, 4]"
readOnlyView.clear() // -> does not compile
val strings = hashSetOf("a", "b", "c", "c")
assert(strings.size == 3)
有关更多信息,请查看此页面: Kotlin
答案 1 :(得分:1)
在Kotlin中,通常不需要对接口进行编程,因为它具有类型推断。你可以简单地写一下:
val someList = ArrayList<String>()
someList.add("Hello")
如果您更改了列表类型,则无需更改声明:
val someList = MyCustomListWichCanOnlyHoldStrings()
someList.add("Hello")
如果你真的想要,你仍然可以像这样手动指定界面:
val someList: List<String> = ArrayList<String>()
someList.add("Hello")
修改强>
我只想详细说明一下,为什么要用Java编程接口。
当您编写所有代码时:
public ArrayList<String> giveMeSomeList() {
ArrayList<String> someList = new ArrayList<>();
someList.add("some");
return someList;
}
并且您希望将列表类型更改为LinkedList
,您需要更改以上至少三个位置的代码。
当你对这样的界面进行编程时:
public List<String> giveMeSomeList() {
List<String> someList = new ArrayList<>();
someList.add("some");
return someList;
}
您只需要在初始化中查找代码,其余代码可以保留原样。
在Kotlin,我们不会遇到这个问题,因为推断了类型。当您不写这种类型时,如果类型发生变化,您就不必更改它。
答案 2 :(得分:0)
我用两种不同的方式解释了这个问题,所以我要写这个包含两个问题的答案:
val mutableList = mutableListOf(/*items*/)//Similar to ArrayList
var immutableList = listOf(/*items*/)//You can't add or remove
可以在没有任何项目的情况下初始化它们,但它需要菱形运算符指定类型。
您应该在创建列表时使用Kotlin初始化方法。 ArrayList有arrayListOf<Type>(items)
你在问题中的代码是:
val list: List<String> = mutableListOf()
或
val List: List<String> = listOf()
还有arrayListOf
(正如我之前提到的那样),而不是直接列表,而是setOf
。
当你这样做时:
val /*var*/ someField = SomeClass()
在Kotlin中,someField获得自动类型推断,这里是SomeClass。执行mutableListOf<SomeClass>
时,推断类型为MutableList<SomeClass>
。因此,如果要指定特定子项,则需要手动编写类型:
val /*var*/ someList: List<SomeClass> = mutableListOf()
就像在Java中一样,只是语法不同。