kotlin(object)
Object
单例模式
在kotlin中,可以非常简单的通过这个关键词实现一个单例类。他可以实现接口,继承类,也可以用扩展方法去扩展类。
他就是一个非常完美的类的声明方法。
当然,同理的作为一个单例类,他并没有构造方法,也就是如果你使用
constructor
将会直接导致报错。
如果在java中要调用kotlin中的object对象,他需要通过一个字段INSTANCE
来实现,具体实例如下
1 | //kotlin |
然后实现结果为-2023-07-12-09-18.png)
乱码暂时不晓得怎么解决。
伴生对象
kotlin并没有静态方法的称谓。所以使用伴生对象。他在大多数情况下可以用来代替java中的static方法。
虽然推荐静态方法使用顶层函数,因为他在编译后会直接编译为static类型。但是某些时候不允许这样操作,比如一个类中的私有类无法通过顶层函数访问到。
-2023-07-14-42-18.png)
1 | class A{ |
声明伴生对象需要使用companion
的关键字,他被声明后,可以通过类名直接使用伴生对象中的方法和属性,而不用创建实例。也可以通过类名调用Companion
伴生对象然后实现。本质是一样的,例如:
1 | A.call() |
他们实际是一样的操作。
工厂模式
工厂模式下,会将类的构造器私有化,不允许通过构造器去实现创造实例。而是通过在伴生对象中,通过定义不同含义名字的各种方法,来实现生成实例类。
而且伴生对象不能被继承和重写。
作为一个普通对象的伴生对象,他甚至还可以定义伴生对象的名字,就像实现单例类那用。然后可以通过他的类名和他的伴生对象名去调用这个伴生对象。
如果要使用java去调用kotlin中的伴生类,一定需要通过他的默认名称
Companion
或者伴生对象名去调用该方法。 或者使用注解@JvmStatic
将方法声明为静态方法,用@JvmFiele
将属性声明为静态属性。这样的话,java可以直接调用,而不用先调用该伴生对象。
匿名内部类
使用object作为匿名内部类,很好理解。就不再多言。