2016-11-21 15 views

答えて

4

、それはあなたが実装する必要があることget and set operator functionsです:

class C { 
    operator fun get(s: String, x: Int) = s + x 
    operator fun set(x: Int, y: Int, value: String) { 
     println("Putting $value at [$x, $y]") 
    } 
} 

と使用方法:

val c = C() 
val a = c["123", 4] // "1234" 
c[1, 2] = "abc" // Putting abc at [1, 2] 

あなたは(インデックスのパラメータの任意の数でgetsetを定義することができます少なくとも1つ、もちろん)。 a.set(i_1, ..., i_n, b)

getに翻訳され

  • a[i_1, ..., i_n]

      a.get(i_1, ..., i_n)

    • a[i_1, ..., i_n] = bに翻訳されています。加えて、setは、その最後の引数として渡された使用場所に割り当てられている表現を持っていますsetは異なる過負荷を持つこともできます。例:

      class MyOrderedMap<K, V> { 
          // ... 
      
          operator fun get(index: Int): Pair<K, V> = ... // i-th added mapping 
          operator fun get(key: K): V = ... // value by key 
      } 
      

      注:両方get機能はm[1]ような呼び出しと一致するので、この例はMyOrderedMap<Int, SomeType>にとって望ましくない曖昧さを導入します。

  • 4

    the documentationa[i]に述べたようにa.get(i)に変換されます。例では:

    class MyObject { 
        operator fun get(ix:Int):String{ 
         return "hello $ix" 
        } 
    } 
    

    てみましょうあなたが書いた:

    val a = MyObject() 
    println(a[123]) //-> "hello 123" 
    

    同様a[i] = bは、メソッド呼び出しa.set(i, b)に変換されます。 Kotlinで

    関連する問題