美文网首页
从java转kotlin开发APP(二)

从java转kotlin开发APP(二)

作者: 决绝觉诀倔崛 | 来源:发表于2018-04-02 14:00 被阅读0次

1.开发工具 android studio-2.3.3
2.AS将java转换kotlin
要先安装kotlin插件

image.png
这个是已安装界面,未安装选择Browse Repositories后再搜索安装。

安装之后打开java代码,选中code-convert file java to kotlin file,然后java代码就会自动转化为kotlin代码了

image.png
  1. 泛型相关问题
    今天在替换代码的时候遇到了一个泛型问题,原JAVA代码如下
 public void upRecycle(RecyclerView recyclerView, LinkedList<MallBean> linkedList) {
        try {
            if (recyclerView.getAdapter() != null && recyclerView.getAdapter() instanceof MallAdapter) {
                MallAdapter mallAdapter = (MallAdapter) recyclerView.getAdapter();
                mallAdapter.setmData(linkedList);
                mallAdapter.notifyDataSetChanged();
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

MallAdapter类如下

public class MallAdapter<T> extends BaseRecyclerAdapter<T> {
.........
}

也就是说我在初始化和赋值使用的时候都没有申明具体的类型,使用的泛型去占坑了,这也是能用的。

自动转成Kotlin代码的时候成这样了

fun upRecycle(recyclerView: RecyclerView, linkedList: LinkedList<MallBean>) {
        try {
            if (recyclerView.adapter != null && recyclerView.adapter is MallAdapter<*>) {
                val mallAdapter = recyclerView.adapter as MallAdapter<*>
                mallAdapter.setmData(linkedList)
                mallAdapter.notifyDataSetChanged()
            }
        } catch (ex: Exception) {
            ex.printStackTrace()
        }
    }

这个时候mallAdapter.setmData(linkedList)是报错的,
报错信息如下

# Out-projected type 'MallAdapter<*>' prohibits the use of 'public open fun setmData(mDate: (Mutable)List<T!>!): Unit defined in MallAdapter'

翻译就是禁止使用setmData方法,问题来了,怎么就不能用了,操作一波过后,发现是因为mallAdapter对象没有申明具体的对象,查询一波文档,关于泛型的使用说明如下,嗯,并没有找到关于这个的匹配说明(或是我看不懂都是说的out,in,Any?什么的,怪我)

嗯,解决方法比较简单,那就是在使用的时候声明类型,也就是在强转的*号改成具体类型也就是如下

      val mallAdapter = recyclerView.adapter as MallAdapter<MallBean>

相关文章

网友评论

      本文标题:从java转kotlin开发APP(二)

      本文链接:https://www.haomeiwen.com/subject/qpbthftx.html