美文网首页
kotlin 基础语法笔记:

kotlin 基础语法笔记:

作者: 程序员阿兵 | 来源:发表于2019-03-13 16:28 被阅读0次

    总结一下kotlin和java的异同:

    1.对象

    java写法:MainActivity.this
    kotlin 写法:this@MainActivity

    2.类

    java写法:MainActivity.class
    kotlin 写法:MainActivity::class.java

    3.继承

    java写法:

    public class MainActivity extends AppCompatActivity {
    }
    

    kotlin 写法:Kotlin 的写法(在 Kotlin 中被继承类必须被 open 关键字修饰)

    class MainActivity : AppCompatActivity() {  
    }
    

    变量

    java写法:Intent intent = new Intent()
    kotlin 写法:var intent = Intent()

    常量

    java写法:final String text = "";
    kotlin 写法:val text = ""

    静态常量

    java写法:

    public class MainActivity extends AppCompatActivity {
        static final String text = "";
    }
    

    kotlin 写法:(需要注意的是要把静态变量定义在类上方)

    const val text = ""
    class MainActivity : AppCompatActivity() {
    }
    

    定义方法

    java方法

    public void test(String message) {
    
    }
    

    kotlin写法 (Unit 跟 void 一样效果)

    fun test(message : String) : Unit {
    }
    // 在 Kotlin 可以省略 Unit 这种返回值
    fun test(message : String) {
    }
    
    重载方法:

    java写法

    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
        }
    }
    

    kotlin写法

    class MainActivity : AppCompatActivity() {
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
        }
    }
    

    基本数据类型

    java写法

    int i = 1;
    long l = 2;
    boolean b = true;
    float f = 0;
    double d = 0;
    char c = 'A';
    String s = "text";
    

    kotlin的写法

    var i : Int = 1
    var l : Long = 2
    var b : Boolean = true
    var f : Float = 0F
    var d : Double = 0.0
    var c : Char = 'A'
    var s : String = "text"
    

    // 更简洁点可以这样,自动推倒类型

    var i = 1
    var l = 2
    var b = true
    var f = 0F
    var d = 0.0
    var c = 'A'
    var s = "text"
    

    比较类型

    Java 的写法

    if ("" instanceof String) {
    }
    

    kotlin的写法

    if ("" is String) {
    }
    

    转换符

    java写法

    int number = 100;
    System.out.println(String.format("商品数量有%d", number));
    

    kotlin的写法

    var number = 100
    println("商品数量有$number")
    

    函数内部函数:

     fun checkNum(start:Int,end:Int){
            fun isThree(x:Int)=(x%3==0)
            fun isFive(x:Int)=(x%5==0)
            for (number in start..end){
                if (isFive(number)){
                    Log.e("--main--","K"+"被五整除")
                }else if (isThree(number)){
                    Log.e("--main--","K"+"被三整除")
                }
            }
        }
    
    

    kotlin 中的lambda

    fun add(x:Int,y:Int){
               return x+y
           }
           //可以改成 匿名函数
           var add={x:Int,y:Int ->
               x+y
           }
    
    fun comboTwoValue(x:Int,y:Int,method :(a:Int,b:Int) ->Int):Int{
           return  method(x,y)
       }
    
    

    kotlin支持扩展功能:

    package com.kotlin.base.ext
    //Kotlin通用扩展
    
    
    /*
        扩展Observable执行
     */
    fun <T> Observable<T>.excute(subscriber: BaseSubscriber<T>, lifecycleProvider: LifecycleProvider<*>) {
        this.subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .compose(lifecycleProvider.bindToLifecycle())
                .subscribe(subscriber)
    }
    
    /*
        扩展数据转换
     */
    fun <T> Observable<BaseResp<T>>.convert():Observable<T>{
        return this.flatMap(BaseFunc())
    }
    
    /*
        扩展Boolean类型数据转换
     */
    fun <T> Observable<BaseResp<T>>.convertBoolean():Observable<Boolean>{
        return this.flatMap(BaseFuncBoolean())
    }
    
    /*
        扩展点击事件
     */
    fun View.onClick(listener:View.OnClickListener):View{
        setOnClickListener(listener)
        return this
    }
    
    /*
        扩展点击事件,参数为方法 直接传入一个方法进去调用
         view.setOnclicklistener{
            method()
         }
     */
    fun View.onClick(method:() -> Unit):View{
        setOnClickListener { method() }
        return this
    }
    
    
    
    /*
        扩展Button可用性
     */
    fun Button.enable(et:EditText,method: () -> Boolean){
        val btn = this
        et.addTextChangedListener(object : DefaultTextWatcher(){
            override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
                btn.isEnabled = method()
            }
        })
    }
    
    
    
    /*
        扩展视图可见性
     */
    fun View.setVisible(visible:Boolean){
        this.visibility = if (visible) View.VISIBLE else View.GONE
    }
    
    

    筛选就是这么简单:

     override fun onBindViewHolder(holder: ViewHolder, position: Int) {
            super.onBindViewHolder(holder, position)
            val model = dataList[position]
            //是否选中
            holder.itemView.mCheckedCb.isChecked = model.isSelected
            //加载商品图片
            holder.itemView.mGoodsIconIv.loadUrl(model.goodsIcon)
            //商品描述
            holder.itemView.mGoodsDescTv.text = model.goodsDesc
            //商品SKU
            holder.itemView.mGoodsSkuTv.text = model.goodsSku
            //商品价格
            holder.itemView.mGoodsPriceTv.text = YuanFenConverter.changeF2YWithUnit(model.goodsPrice)
            //商品数量
            holder.itemView.mGoodsCountBtn.setCurrentNumber(model.goodsCount)
            //选中按钮事件
            holder.itemView.mCheckedCb.onClick {
                model.isSelected = holder.itemView.mCheckedCb.isChecked
                val isAllChecked = dataList.all {
                    it.isSelected }
                Bus.send(CartAllCheckedEvent(isAllChecked))
                notifyDataSetChanged()
            }
    
            //商品数量变化监听
            holder.itemView.mGoodsCountBtn.getEditText().addTextChangedListener(object:DefaultTextWatcher(){
                override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
                    model.goodsCount = s.toString().toInt()
                    Bus.send(UpdateTotalPriceEvent())
                }
            })
    
        }
    
    //返回的界面更新
      private fun initObserve() {
            Bus.observe<CartAllCheckedEvent>().subscribe { t: CartAllCheckedEvent ->
                run {
                    mAllCheckedCb.isChecked = t.isAllChecked
                    updateTotalPrice()
                }
            }.registerInBus(this)
    
            Bus.observe<UpdateTotalPriceEvent>().subscribe {
                updateTotalPrice()
            }.registerInBus(this)
        }
    

    相关文章

      网友评论

          本文标题:kotlin 基础语法笔记:

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