zoukankan      html  css  js  c++  java
  • object

     object 表达式

    创建匿名内部类的形式:object: ClassName {...}

     val handler:Handler=object: Handler(){
            override fun handleMessage(msg: Message?) {
                super.handleMessage(msg)
                when(msg?.what) {
                    1 -> "Expression1"
                    2 -> "Expression2"
                    else -> "else"
                }
            }
        }

    object 对象声明,实现单例模式

    和普通类的声明一样,可以包含属性、方法、初始化代码块以及可以继承其他类或者实现某个接口,但是它不能包含构造器(包括主构造器以及次级构造器)

    Kotlin语言中使用"object"修饰静态类,被修饰的类,可以使用类名.方法名的形式调用,如下:

    object Util {
        fun getCurrentVersion(): String {
            return "java 1.8"
        }
    }

    调用:

    println(Util.getCurrentVersion())

    object Obj{
        var name="jack"
        var age="10"
        init {
            println("object init...")
        }
    }

     使用jad反编译的java代码如下:

    // Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov.
    // Jad home page: http://www.kpdus.com/jad.html
    // Decompiler options: packimports(3) 
    // Source File Name:   dd.kt
    
    package com.jack.objects;
    
    import java.io.PrintStream;
    import kotlin.jvm.internal.Intrinsics;
    
    public final class Obj
    {
    
        public final String getName()
        {
            return name;
        }
    
        public final void setName(String <set-?>)
        {
            Intrinsics.checkParameterIsNotNull(<set-?>, "<set-?>");
            name = <set-?>;
        }
    
        public final String getAge()
        {
            return age;
        }
    
        public final void setAge(String <set-?>)
        {
            Intrinsics.checkParameterIsNotNull(<set-?>, "<set-?>");
            age = <set-?>;
        }
    
        private Obj()
        {
        }
    
        private static String name = "jack";
        private static String age = "10";
        public static final Obj INSTANCE;
    
        static 
        {
            Obj obj = new Obj();
            INSTANCE = obj;
            String s = "object init...";
            boolean flag = false;
            System.out.println(s);
        }
    }

    可见kotlin中object实现的单例模式对应java中的饿汉式单例模式(线程安全,调用效率高,但是不能延时加载)

    伴生对象 Companion Object

    伴生对象(companion object)是一个声明在类中的普通对象,它可以有名称 (默认为Companion) ,它可以实现一个接口或者有扩展函数或属性,一个类的伴生对象只能有一个。

    Kotlin语言中使用"companion object"修饰静态方法,可以使用类名.方法名的形式调用,如下:

    class Util2 {
        companion object {
            fun getCurrentVersion(): String {
                return "java 1.8"
            }
        }
    }

    调用:

    println(Util2.getCurrentVersion())

    println(Util2.Companion.getCurrentVersion())

  • 相关阅读:
    一步一步学习IdentityServer4 (4) 处理特殊需求之-登录等待页面
    php 打包下载
    nginx https反向代理tomcat
    the "ssl" parameter requires ngx_http_ssl_module in /usr/local/nginx/conf/nginx.conf
    layui配置
    vue 学习一
    MyCAT+MySQL 搭建高可用企业级数据库集群——第3章 MyCat核心配置讲解
    第一模块·开发基础-第3章 作业讲解
    《扭转人生的40个哲学提问》 徐帆 著
    零基础学 JavaScript 全彩版 明日科技 编著
  • 原文地址:https://www.cnblogs.com/rainboy2010/p/9082790.html
Copyright © 2011-2022 走看看