您当前的位置: 首页 >  面试
  • 0浏览

    0关注

    674博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

面试:kotlin相关拾遗

沙漠一只雕得儿得儿 发布时间:2021-12-11 15:29:06 ,浏览量:0

1、Kotlin中const 修饰的常量

Kotlin中const 修饰的常量 - 简书

想要实现真正的常量其实不难,方法有两种,一种是const,另一个使用@JvmField注解

const

const,顾名思义,就是常量的单词简写,使用它可以声明常量,不过仅限于在top-level和object中。

  //top-level
    const val name = "Kotlin"

  //object中
    class DemoConstant {
          companion object {
              const val subName = ""
          }
    }
  • 所谓的top-level就是位于代码文件的最外部,比如常见的类(非内部类和嵌套类)就是在top-level。意思是在结构上常量不属于任何的类,而是属于文件。
  • object中可以指的是最外部的object也可以指的是companion object.
@JvmField
  • 在val常量前面增加一个@JvmField就可以将它变成常量。
  • 其内部作用是抑制编译器生成相应的getter方法
  • 是用该注解修饰后则无法重写val的get方法

示例如下

    @JvmField val NAME = "89757
2、Kotlin中常量和静态方法

Kotlin中常量和静态方法 - 简书

常量

Java中:

   class StaticDemoActivity {
         public static final String LOAN_TYPE = "loanType";
         public static final String LOAN_TITLE = "loanTitle";
    }

Kotlin中:

  class StaticDemoActivity {
      companion object {
           val  LOAN_TYPE = "loanType"
           val  LOAN_TITLE = "loanTitle"
    }
}


 或者
  class StaticDemoActivity {
      companion object {
         const val LOAN_TYPE = "loanType"
         const val LOAN_TITLE = "loanTitle"
    }
}
静态方法

Java代码:

      class StaticDemoActivity {
          public static void test(){
                、、、
          } 
      }

Kotlin中:

      class StaticDemoActivity {
          companion object {
               fun test(){
                    、、、
                }
          }
      }
3、Kotlin中的object 与companion object的区别

Kotlin中的object 与companion object的区别 - 简书

使用场景

  • 如果一个类是工具类,里面全是静态方法,此时我们可以使用对象声明;
  • 如果一个类里面有部分静态成员(包括静态变量和方法),此时就可以使用companior object
一、 object关键字

object 关键字可以表达两种含义:一种是对象表达式,另一种是 对象声明

1、对象表达式

继承一个匿名对象

val textView = findViewById(R.id.tv)
textView.setOnClickListener(object : OnClickListener {
        override fun onClick(p0: View?) {
            Toast.makeText(this@TestActivity, "点击事件生效", Toast.LENGTH_LONG)
        }

})

上面代码其实就是我们经常要给 view 设置的点击事件,OnClickListener 事件是一个匿名类的对象,用object来修饰。

2、对象声明

object 修饰的类为静态类,里面的方法和变量都为静态的。

2.1 直接声明类

object DemoManager {
    private val TAG = "DemoManager"
        
    fun a() {
        Log.e(TAG,"此时 object 表示 声明静态内部类")
    }
    
}

2.2 声明静态内部类

类内部的对象声明,没有被inner 修饰的内部类都是静态的

class DemoManager{
    object MyObject {
        fun a() {
            Log.e(TAG,"此时 object 表示 直接声明类")
        }
    }
}

如果需要调用 a()方法

kotlin中调用

fun init() {
    MyObject.a()
}

java中调用

 MyObject.INSTANCE.a();
 

二、companion object

companion object 修饰为伴生对象,伴生对象在类中只能存在一个,类似于java中的静态方法 Java 中使用类访问静态成员,静态方法。

companion object {
    private val TAG = "DemoManager"

    fun b() {
        Log.e(TAG,"此时 companion objec t表示 伴生对象")
    }
}

kotlin 中调用

fun init(){
       b()
}

java 中调用

DemoManager.Companion.b();

companion object 相关的内容可以查阅 Kotlin中常量和静态方法 这篇文章,在这里不多在具体描述。

4、java和kotlin的单例写法对比

关注
打赏
1657159701
查看更多评论
立即登录/注册

微信扫码登录

0.0397s