当前位置: 首页 > article >正文

Object-Android关键字,伴生对象,Kotlin静态

目录

1、定义一个类并生成它的单例对象

原理

调用方式

2、伴生对象(静态类)

原理

调用方式

3、对象表达式


Object在Android独特的前缀通常有以下三种用法:

1、定义一个类并生成它的单例对象

object Singleton{
    fun test(){}
}

原理

其实就是Java的单例模式,Kotlin中提供object方便创建单例

public final class Singleton {
   public static final Singleton INSTANCE;
 
   public final void xxx() {
   }
 
   private Singleton() {
   }
 
   static {
      Singleton var0 = new Singleton();
      INSTANCE = var0;
   }
}

调用方式

类已经自动生成单例对象,直接使用类名,即可获取单例对象,调用对象方法

Singlton.test()

2、伴生对象(静态类)

Kotlin语言特有companion object代码块,替代Java中static关键字,内部定义的方法和属性成为该类的静态方法和静态属性

class User(val male: Int){
    companion object {
        val MALE = 0
        
        fun isMale(male:Int) = male == MALE
    }
}

原理

public final class User {
   private final int male;
   private static final int MALE = 0;
   public static final User.Companion Companion = new User.Companion((DefaultConstructorMarker)null);
 
   public final int getMale() {
      return this.male;
   }
 
   public User(int male) {
      this.male = male;
   }
 
   public static final class Companion {
      public final int getMALE() {
         return User.MALE;public static final User.Companion Companion = new User.Companion((DefaultConstructorMarker)null);
      }
 
      public final boolean isMale(int male) {
         return male == ((User.Companion)this).getMALE();
      }
 
      private Companion() {
      }
 
      // $FF: synthetic method
      public Companion(DefaultConstructorMarker $constructor_marker) {
         this();
      }
   }
}
 

调用方式

User.MALE
User.isMale(1)

3、对象表达式

类似Java匿名内部类(在定义类的同时实例化类),一次性实现接口

拿点击事件举例,调用setOnClickListener()需传入一个实现View.onClickListener接口的对象

因为该对象是一次性使用,用匿名内部类   

 public void setOnClickListener(@Nullable OnClickListener l) {
        throw new RuntimeException("Stub!");
    }

       object:接口{重写接口方法}

button.setOnClickListener(object : View.OnClickListener{
        override fun onClick(v: View) {
            
        }
})

http://www.kler.cn/news/290861.html

相关文章:

  • SOA通信中间件介绍(二)
  • 海康威视 嵌入式 面经 海康威视嵌入式软件 嵌入式硬件总结面试经验 面试题目汇总
  • 经验笔记:容器化
  • livekitAI对话实践(python+next)
  • Java-互斥锁死锁释放锁
  • STM32G474之TIM1更新中断
  • 【JAVA GC垃圾回收器】JAVA GC垃圾回收算法,垃圾回收器,垃圾回收策略总结,可达性分析算法,分代垃圾回收
  • 探究 Eureka 在 Spring Boot 中的配置注入与统一管理机制(下)——第四节
  • (四)vForm 动态表单自定义组件、属性
  • 002.Python爬虫系列_初识协议
  • Netty从入门到超神-NIO 三大核心(selector,channel,buffer)(二)
  • 数学基础 -- 线性代数之向量空间
  • 探究 Eureka 在 Spring Boot 中的配置注入与统一管理机制(下)——第五节
  • guava中对Map的扩展数据结构
  • Vue输入框模糊搜索的多种写法
  • Docker中的容器内部无法使用vi命令怎么办?
  • MySQL自动安装脚本8.0和5.0均可
  • SD-WAN组网:定义与部署步骤解析
  • AI绘画SD中如何安装/更新/卸载 Stable Diffusion WebUI 插件?SD新手必看的保姆级教程!
  • 使用 Cloudflare R2 代替 AWS S3……
  • Day15_0.1基础学习MATLAB学习小技巧总结(15)——字符矩阵
  • Python批量分割Excel后逐行做差、合并文件的方法
  • Redisson的几种锁的通俗说明
  • Go语言多态实践以及gin框架c.BindJSON序列化遇到的坑
  • C#数组中的Rank,GetUpperBound(), GetLength()
  • linux find 之 执行
  • GIT 下载安装使用教程
  • 小程序中用于跳转页面的5个api是什么?区别是什么
  • 【计算机网络】TCP协议
  • 【深度学习】向量化