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())

  • 相关阅读:
    spring FactoryBean配置Bean
    注意使用 BTREE 复合索引各字段的 ASC/DESC 以优化 order by 查询效率
    Mysql经常使用基本命令汇总及默认账户权限与改动
    图像边缘检測--OpenCV之cvCanny函数
    HDU 1556 Color the ball 树状数组 题解
    JMeter使用记录2 -- Web測试
    C++编程
    矩阵树定理速证
    DM816x算法具体解释--之OSD
    哥尼斯堡的“七桥问题”(25分)(欧拉回路,并查集)
  • 原文地址:https://www.cnblogs.com/rainboy2010/p/9082790.html
Copyright © 2011-2022 走看看