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

 

posted @ 2018-05-24 14:39  南极冰川雪  阅读(222)  评论(0编辑  收藏  举报