美文网首页
Kotlin学习

Kotlin学习

作者: 走在冷风中吧 | 来源:发表于2018-08-02 20:29 被阅读17次

1. 构造函数

kotlin中构造函数分为主构造函数和次级构造函数
主构造函数:可以直接在类名后面的括号内进行参数定义
想要在构这样的隐式构造函数中执行一些代码, 要在init方法中定义需要的实现.
次级构造函数:
次级构造函数必须直接或者间接的继承主构造函数或者父类的构造函数
如果有多个构造函数的话, 需要在代码中显示的声明多个构造函数,次级构造函数必须直接或者间接的继承主构造函数或者父类的构造函数

class MyTextView: View {

    init {
        Log.e("lily","testinit")
    }
//主构造函数 可以在类名后面声明 也可以显示的方法声明
    constructor(context: Context):super(context){

    }
//次级构造函数直接集成主构造函数
     constructor(context:Context, string: String):this(context){

    }

//次级构造函数间接集成主构造函数
    constructor(context: Context, int: Int, string: String):this(context,string){
    }


}

2. 访问修饰符

kotlin中的类默认是public final修饰的, 如果需要继承这个类, 可以在类前面加上open修饰符

open class BaseActivity: AppCompatActivity(){
}

private:同java
protected:同java
public:同java
internal: kotlin特有的, 同一模块(module)内可以访问,模块外不可以访问, 通常用于项目中组件化等这种结构时,为了避免直接持有类型,可以使用internal修饰

3. 伴生对象

kotlin中没有静态方法, 想要实现像java中一样的静态方法需要使用伴生对象(companion object)

class FileUtil {
//在伴生对象中声明了一个静态方法
    companion object {
        fun checkFileName(name: String): String {
            return name
        }
    }
}

//在kotlin中调用该方法, 类名.方法
fun main(){
    FileUtil.checkFileName("aa")
}

//在java中调用kotlin中定义的方法, 类名.Companion.方法
public class TestFile {
    public void test(){
        FileUtil.Companion.checkFileName("aa");
    }
}

4. 单例类

伴生对象的作用, 可以使用伴生对象创建单例:

//将构造方法私有化
class CarFactory private constructor(){

    companion object {
        //通过伴生对象的方法创造一个内部类
        fun getSingleton():CarFactory{
            return Holder.instance
        }
    }

    private object Holder{
        var instance = CarFactory()
    }
}

fun getCar(){
//直接获得单例对象
    CarFactory.getSingleton()
}
  1. 动态代理
6. kotlin 持有的类

6.1 数据类:
使用data修饰class, 使用data修饰的class都是final的, 不可以被继承
编译器会自动默认生成setter(),getter(),equals(),toString(),hashCode(),copy()方法

data class xxx(val name:String){
}

6.2 密闭类(类似于枚举类)
sealed 是kotlin具有更强的拓展性, 方便维护

  1. kotlin的结构 将一个对象拆解成几个变量进行赋值
class User(var String:age, var String: name){
operate fun component1() = age
operate fun component2() = name
}
fun main(){
val user = User("11","bob")
//user对象会自动拆解成age和name两个变量
val (age, name) = user
}

相关文章

网友评论

      本文标题:Kotlin学习

      本文链接:https://www.haomeiwen.com/subject/nfehvftx.html