开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第26天,点击查看活动详情
一、嵌套类
1)、Kotlin 中的嵌套类类似 Java 中的静态内部类,不会持有外部类的引用
//定义一个外部类
class SomeSpecificClass1(val attr: String){
//定义一个嵌套类
class NestedClass(val nestedAttr: String){
fun nestedMethod(){
print("My name is $nestedAttr")
}
}
}
fun main() {
//嵌套类测试
val nested = SomeSpecificClass1.NestedClass("erdai")
nested.nestedMethod()
}
//打印结果
My name is erdai
二、内部类
1)、定义一个类的时候,在其前面加上 inner 关键字修饰
2)、Kotlin 中的内部类类似 Java 中的非静态内部类
//定义一个外部类
class SomeSpecificClass2(val attr: String){
//定义一个内部类
inner class InnerClass(val innerAttr: String){
fun nestedMethod(){
println("My name is $innerAttr, My Parent Class is $attr")
}
}
}
fun main() {
//内部类测试
val inner = SomeSpecificClass2("SomeSpecificClass2").InnerClass("erdai")
inner.nestedMethod()
}
//打印结果
My name is erdai, My Parent Class is SomeSpecificClass2
三、匿名内部类
在 Java 中创建匿名内部类,只需要把这个类直接 new 出来,以 View 的 setOnClickListener 为例:
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
上述例子在 Kotlin 中有两种写法,如下:
//方式一:object 方式,类似 Java 匿名内部类
view.setOnClickListener(object : View.OnClickListener{
override fun onClick(v: View?) {
}
})
//方式二:Lambda 表达式
view.setOnClickListener { v ->
}
四、枚举类
1)、Kotlin 中声明一个枚举类,使用 enum class 修饰
2)、枚举类的属性可以调用构造方法赋值,多个属性中间使用 , 隔开
3)、枚举类的每个属性都是全局单例的
//Java 中写法
enum Season{
SPRING("春"),SUMMER("夏"),AUTUMN("秋"),WINTER("冬");
private String name;
Season(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
//Kotlin 中写法
enum class SomeSpecificClass5(val attr: String){
SPRING("春"), SUMMER("夏"),AUTUMN("秋"),WINTER("冬")
}
fun main() {
//枚举类测试
println(SomeSpecificClass5.SPRING.attr)
}
//打印结果
春
五、模版类
1)、基于泛型实现
class SomeSpecificClass6<T>(var attr: T){
fun getMyAttr(): T{
return attr
}
}
fun main() {
//模版类测试
val template1 = SomeSpecificClass6<String>("erdai")
println(template1.getMyAttr())
val template2 = SomeSpecificClass6<Int>(666)
println(template2.getMyAttr())
}
//打印结果
erdai
666
六、单例类
1)、Kotlin 中,我们只需要使用 object 关键字去替换 class 关键字就可以去定义一个单例类了
2)、调用单例类中的方法也比较简单,直接使用类名 . 上方法就可以了,类似于 Java 中的静态方法调用方式
object Singleton{
fun singletonTest(){
println("singletonTest in Kotlin is called.")
}
}
fun main() {
//单例类测试
Singleton.singletonTest()
}
//打印结果
singletonTest in Kotlin is called.
七、伴生类
1)、使用 companion object 为一个类创建一个伴生类,然后调用这个伴生类的方法,这个方法不叫静态方法,但是可以当作静态方法调用
class SomeSpecificClass8{
companion object{
fun getCompanionMethod(): String{
return "erdai666"
}
}
}
fun main() {
//伴生类测试
println(SomeSpecificClass8.getCompanionMethod())
}
八、类型别名
1)、使用 typealias 关键字定义一个类型别名
typealias a = (String,Int) -> String
inline fun test(params1: String,params2: Int, aliasA: a) : String{
return aliasA(params1,params2)
}
fun main() {
val test = test("erdai", 666) { params1, param2 ->
params1 + param2
}
println(test)
}
//打印结果
erdai666
九、总结
本篇文章我们介绍了 Kotlin 中的一些类:
1、嵌套类
2、内部类
3、匿名内部类
4、枚举类
5、模版类
6、单例类
7、伴生类
8、类型别名
大家可以类比 Java 去学习,这样能够加深你的印象
好了,本篇文章到这里就结束了,希望能给你带来帮助 🤝