なぜそれが同様のコードをJavaでコンパイルするときKotlinでコンパイルに失敗プット(への呼び出し)があります

AlbertB:

私はJavaで、以下の機能を持っていると私はKotlinに変換する必要があります。

@Override
public void afterTextChanged(Editable s) {

    if (s != null && !"".equals(s.toString())) {
        int position = (Integer) mHolder.numEdit.getTag();
        // Saved to the data variable when the data changes
        mData.get(position).put("list_item_inputvalue",
                s.toString());
    }
}

これは私が作成したことと等価Kotlinコードです:

override fun afterTextChanged(s: Editable?) {

    if (s != null && "" != s.toString()) {
        val position = mHolder.numEdit!!.tag as Int
        // Saved to the data variable when the data changes
        mData?.get(position).put("list_item_inputvalue", s.toString())
    }
}

コンパイラはへの呼び出しが好きではありません.put()Javaで変数MDATAは、次のとおりです。

private List<Map<String, String>> mData;

そして、Kotlin:

var mData: List<Map<String, String>>? = null

しないのはなぜの変換のようなコンパイラputKotlinで?

更新:

println(mData) = [{list_item_inputvalue=0}, {list_item_inputvalue=1},...]

println(mData?.get(position)) = {list_item_inputvalue=8}

エラー

Javaでコード

スティーブ:

あなたの質問では、この文の周りにあなたの問題センター:

var mData: List<Map<String, String>>? = null

Kotlinでは、Mapタイプは不変であるので全く持っていない.put()方法を。それはあなたが直面して実行している問題です。それを修正するには、ちょうどこの文を次のように変更します

var mData: List<MutableMap<String, String>>? = null

二番目の '?' 後に必要であるmData?.get(position)という文が返されますので、null場合mData == nullつまり、そのステートメントは、の型を返すMutableMap<String, String>?にもかかわらず、.put()それ自体ではのタイプを返しますMutableMap<String, String>

要約すると...あなたが変更可能なマップのリストを作成した場合、コンパイラはその文と幸せになります。

mData?.get(position)?.put("list_item_inputvalue", s.toString())

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=227329&siteId=1