【Kotlin】匿名类和伴生类
1.【Kotlin】Kotlin环境搭建2.【Kotlin】变量和基本数据类型3.【Kotlin】流程控制4.【Kotlin】函数5.【Kotlin】Lambda表达式6.【Kotlin】类和对象7.【Kotlin】运算符函数、解构函数、中缀函数8.【Kotlin】扩展属性、扩展函数9.【Kotlin】Array简介10.【Kotlin】List、Set、Map简介11.【Kotlin】Sequence简介
12.【Kotlin】匿名类和伴生类
13.【Kotlin】委托模式14.【Kotlin】协程15.【Kotlin】Flow简介16.【Kotlin】Channel简介17.【Kotlin】select简介1 匿名类
1)无继承
fun main() {
var obj = object {
var name: String = "zhang"
override fun toString(): String {
return name
}
}
println(obj) // zhang
}
2)有继承
fun main() {
var obj = object: People {
var name: String = "zhang"
override fun play() {
println("play, $name")
}
}
obj.play() // play, zhang
}
interface People {
fun play()
}
2 单例
2.1 案例一
1)object 单例
fun main() {
var singleton = Singleton
println(singleton)
}
object Singleton {
var name = "zhang"
override fun toString(): String {
return return name
}
}
2)对应的 java 类
Singleton.java
public final class Singleton {
private static String name;
public static final Singleton INSTANCE;
static {
INSTANCE = new Singleton();
name = "zhang";
}
private Singleton() {
}
public final String getName() {
return name;
}
public final void setName(String var1) {
name = var1;
}
public String toString() {
return name;
}
}
java 中调用如下。
Singleton singleton = Singleton.INSTANCE;
System.out.println(singleton);
2.2 案例二
1)object 单例
fun main() {
var stu = Student.Tools.create("zhang")
println(stu) // zhang
println(Student.Tools.age) // 15
}
class Student(var name: String) {
object Tools {
var age: Int = 15
fun create(name: String): Student {
return Student(name)
}
}
override fun toString(): String {
return name
}
}
2)对应的 java 类
Student.java
public final class Student {
private String name;
public Student(String name) {
this.name = name;
}
public final String getName() {
return this.name;
}
public final void setName(String var1) {
this.name = var1;
}
public String toString() {
return this.name;
}
public static final class Tools {
private static int age;
public static final Tools INSTANCE;
static {
INSTANCE = new Tools();
age = 15;
}
private Tools() {
}
public final Student create(String name) {
return new Student(name);
}
public final int getAge() {
return age;
}
public final void setAge(int var1) {
age = var1;
}
}
}
java 中调用如下。
Student stu = Student.Tools.INSTANCE.create("zhang");
System.out.println(stu);
System.out.println(Student.Tools.INSTANCE.getAge());
3 伴生类
3.1 伴生类应用
1)应用
fun main() {
var stu = Student.create("zhang")
println(stu) // zhang
println(Student.age) // 15
}
class Student(var name: String) {
companion object Tools {
var age: Int = 15
fun create(name: String): Student {
return Student(name)
}
}
override fun toString(): String {
return name
}
}
2)反编译后 java 类
Student.java
public final class Student {
private String name;
private static int age = 15;
public static final Tools Tools = new Tools(();
public Student(String name) {
this.name = name;
}
public final String getName() {
return this.name;
}
public final void setName(String var1) {
this.name = var1;
}
public String toString() {
return this.name;
}
public static final class Tools {
private Tools() {
}
public final Student create(String name) {
return new Student(name);
}
public final int getAge() {
return Student.age;
}
public final void setAge(int var1) {
Student.age = var1;
}
}
}
java 中调用如下。
Student stu = Student.Tools.create("zhang");
System.out.println(stu);
System.out.println(Student.Tools.getAge());
3.2 @JvmStatic 应用
为方便 Java 中也可以直接调用 Student.create(),可以给伴生类中的函数添加 @JvmStatic 注解。
1)应用
class Student(var name: String) {
companion object Tools {
var age: Int = 15
@JvmStatic
fun create(name: String): Student {
return Student(name)
}
}
override fun toString(): String {
return name
}
}
java 中调用如下。
Student stu = Student.create("zhang");
System.out.println(stu);
System.out.println(Student.Tools.getAge());
2)反编译后 java 类
public final class Student {
private String name;
private static int age = 15;
public static final Tools Tools = new Tools();
public Student(String name) {
this.name = name;
}
public static final Student create(String name) {
return Tools.create(name);
}
public final String getName() {
return this.name;
}
public final void setName(String var1) {
this.name = var1;
}
public String toString() {
return this.name;
}
public static final class Tools {
private Tools() {
}
public final Student create(String name) {
return new Student(name);
}
public final int getAge() {
return Student.age;
}
public final void setAge(int var1) {
Student.age = var1;
}
}
}
说明:对比有无 @JvmStatic 注解反编译后的代码,发现有 @JvmStatic 注解时,反编译的代码里 Student 类中多了静态的 create 方法,因此在 Java 中可以直接调用 Student.create()。
声明:本文转自【Kotlin】匿名类和伴生类。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)