1、声明外部类
作用是java 饿汉单例模式,关于单例模式内容可以看这篇关于单例模式的内容
https://blog.csdn.net/wuqiqi1992/article/details/107862703
package com.androidtv.pos.single
/**
* @author wuqiqi
* date on 2020/8/7
* describe 声明对象
*/
object LoginUtils {
}
我们通过 Tools->Kotlin->show kotlin bytecode,可以查看kotlin生成的java代码
package com.androidtv.pos.single;
import kotlin.Metadata;
@Metadata(
mv = {1, 1, 16},
bv = {1, 0, 3},
k = 1,
d1 = {"\u0000\f\n\u0002\u0018\u0002\n\u0002\u0010\u0000\n\u0002\b\u0002\bÆ\u0002\u0018\u00002\u00020\u0001B\u0007\b\u0002¢\u0006\u0002\u0010\u0002¨\u0006\u0003"},
d2 = {"Lcom/androidtv/pos/single/LoginUtils;", "", "()V", "app_debug"}
)
public final class LoginUtils {
public static final LoginUtils INSTANCE;
private LoginUtils() {
}
static {
LoginUtils var0 = new LoginUtils();
INSTANCE = var0;
}
}
实际上就是饿汉单例模式
2、声明内部类
相当于声明了一个静态内部单例类 (同1相似)
package com.androidtv.pos.single
/**
* @author wuqiqi
* date on 2020/8/7
* describe 声明内部class
*/
class LoginUtils {
object LoginItem{
}
}
用工具查看java代码:
package com.androidtv.pos.single;
import kotlin.Metadata;
@Metadata(
mv = {1, 1, 16},
bv = {1, 0, 3},
k = 1,
d1 = {"\u0000\f\n\u0002\u0018\u0002\n\u0002\u0010\u0000\n\u0002\b\u0003\u0018\u00002\u00020\u0001:\u0001\u0003B\u0005¢\u0006\u0002\u0010\u0002¨\u0006\u0004"},
d2 = {"Lcom/androidtv/pos/single/LoginUtils;", "", "()V", "LoginItem", "app_debug"}
)
public final class LoginUtils {
@Metadata(
mv = {1, 1, 16},
bv = {1, 0, 3},
k = 1,
d1 = {"\u0000\f\n\u0002\u0018\u0002\n\u0002\u0010\u0000\n\u0002\b\u0002\bÆ\u0002\u0018\u00002\u00020\u0001B\u0007\b\u0002¢\u0006\u0002\u0010\u0002¨\u0006\u0003"},
d2 = {"Lcom/androidtv/pos/single/LoginUtils$LoginItem;", "", "()V", "app_debug"}
)
public static final class LoginItem {
public static final LoginUtils.LoginItem INSTANCE;
private LoginItem() {
}
static {
LoginUtils.LoginItem var0 = new LoginUtils.LoginItem();
INSTANCE = var0;
}
}
}
3、表达式的使用
类似于java的匿名内部类
4、同 Companion 一起使用
伴生对象
先写一部分:等有时间再弄