Kotlin初步代码编写

本文介绍了Kotlin中的变量声明、空安全特性以及与Java的差异。通过对比Java的适配器HomeAdapter与Kotlin的HomeKtAdapter,展示了Kotlin简化构造函数和类定义的方式。在Kotlin中,RecyclerView的设置、List的创建更加简洁,并且提供了空安全的保障,即使字段为空也不会立即抛出异常。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


  • 类和构造函数

Kotlin创建类的方式与Java类似,如创建Person类:
class Person{
    var name: String? = ""
    var age: Int = 0
}

可以看到,Kotlin的变量声明方式略有些不同。另外,为了实现“空安全”,Kotlin对可以为空的变量和不可以为空的变量作了区分。在上述代码中,变量age不可为空,而?表明变量name可以为空。下面创建实例(注,Kotlin实例时没有关键字new,实例完就可以直接赋值了):

var person = Person()
person.name= "yoyo"
person.age = 22

构造函数在Kotlin创建非常简单(注,这个类没有任何内容可以省略大括号),如下:

class Person(var name: String?, var age: Int)

构造函数的函数体你可以写在init块中:

class Person(var name: String?, var age: Int){
     init{
        ...
    }
}


  • Kotlin编写类

从下面图可以看出可以创建Activity、file、class的kt文件
新建

下面编写一个RecyclerView展示集合类HomeFragment.kt,由于xml比较简单就不贴出来了:


class HomeFragment : Fragment() {

    private var persons: List<Person>? = null

    override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        return inflater!!.inflate(R.layout.fragment_home,container,false)
    }

    override fun onViewCreated(view: View?, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        getData()
        val recyclerView : RecyclerView = view!!.findViewById(R.id.recycler_view) as RecyclerView
        recyclerView.layoutManager = LinearLayoutManager(activity!!)
        recyclerView.addItemDecoration(DividerDecoration(activity))
        //java写的适配器
//        val adapter: HomeAdapter = HomeAdapter(activity, persons!!)
        //kotlin写的适配器
        val adapter: HomeKtAdapter = HomeKtAdapter(activity, persons!!)
        recyclerView.adapter = adapter
    }

    /**
     * mock数据
     */

     private fun getData(): List<Person> {
        persons = listOf(

                Person("html", 12),
                Person("kotlin", 36),
                Person("java", 12),
                Person(null, 12),
                Person("android", 12),
                Person("ios", 12),
                Person("c++", 12),
                Person("php", 12)
        )
        return persons as List<Person>
    }
}

如你所见,我们定义类一个变量并转型为RecyclerView。这里与Java有点不同,LayoutManager、adapter等会通过属性的方式被设置,而不是通过set;
List的创建也与java不一样,现在简单的可以通过使用一个函数创建一个常量的List,它就会自动推断出结果的类型。

这里为了体现kotlin与java代码互通,这里写了两个适配器,一个是用java写的HomeAdapter.java,另一个是用kotlin写的HomeKtAdapter.kt

Java写的适配器HomeAdapter.java:

/**
 * HomeAdapter
 * Created by chen_yong on 2017/5/24.
 */

public class HomeAdapter extends RecyclerView.Adapter<HomeAdapter.ViewHolder> {

    private List<Person> persons;
    private LayoutInflater inflater;

    public HomeAdapter(Context mContext,List<Person> persons) {
        this.persons = persons;
        this.inflater = LayoutInflater.from(mContext);
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        return new ViewHolder(inflater.inflate(R.layout.home_item,parent,false));
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        Person person = persons.get(position);
        holder.tv_name.setText(person.getName());
        holder.tv_age.setText(String.valueOf(person.getAge()));

    }

    @Override
    public int getItemCount() {
        return persons.size();
    }

    class ViewHolder extends RecyclerView.ViewHolder{

        TextView tv_name;
        TextView tv_age;
        public ViewHolder(View itemView) {
            super(itemView);
            tv_name = (TextView) itemView.findViewById(R.id.name);
            tv_age = (TextView) itemView.findViewById(R.id.age);
        }
    }
}
Kotlin写的适配器HomeKtAdapter.kt

/**
 * HomektAdapter
 * Created by chen_yong on 2017/5/24.
 */

 class HomeKtAdapter(mContext: Context, private val persons: List<Person>) : RecyclerView.Adapter<HomeKtAdapter.ViewHolder>() {
    private val inflater: LayoutInflater = LayoutInflater.from(mContext)

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        return ViewHolder(inflater.inflate(R.layout.home_item, parent, false))
    }

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        val person = persons[position]
        holder.tv_name.text = person.name
        holder.tv_age.text = person.age.toString()

    }

    override fun getItemCount(): Int {
        return persons.size
    }

    inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {

        var tv_name: TextView = itemView.findViewById(R.id.name) as TextView
        var tv_age: TextView = itemView.findViewById(R.id.age) as TextView

    }
}


  • 效果展示

从下面图就可以体现出安全性,字段为空不做判断也不会报错
这里写图片描述

点击Demo下载
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值