你如何编程在Kotlin界面?

时间:2018-05-15 13:00:36

标签: java kotlin

在Java中,我们可以使用以下代码:

List<String> a = new ArrayList<>();

我们怎么能在Kotlin那样做呢?

3 个答案:

答案 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)

我用两种不同的方式解释了这个问题,所以我要写这个包含两个问题的答案:

  1. 在Kotlin中使用列表
  2. 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

    1. 声明超类类型(即List)但初始化子类
    2. 当你这样做时:

      val /*var*/ someField = SomeClass()
      
      在Kotlin中,someField获得自动类型推断,这里是SomeClass。执行mutableListOf<SomeClass>时,推断类型为MutableList<SomeClass>。因此,如果要指定特定子项,则需要手动编写类型:

      val /*var*/ someList: List<SomeClass> = mutableListOf()
      

      就像在Java中一样,只是语法不同。