zoukankan      html  css  js  c++  java
  • Kotlin基础知识

    1. 改进点/基础

    //安全判空
    val length = text?.length;
    		  
    //类型转换
    if (object is Car) {
    	var car = object as Ca
    }
    
    //操作符变化
    &   and
    | 	or
    ^	xor
    >> 	shr
    <<	shl
    
    //打印日志
    print("123123")
    println("asdassda")
    

    2. 字符串

    //多行字符串
    val xx = """asdasdasd
    		  asdasdsd """;
    			
    //字符串模版
    var a = 1; val s1 = "a is $a"
    

    4. 语法

    var name = "123"; 	//可变变量
    val name = "asdasd";	//不可变量,相当于java的final
    var name: String = ...;
    

    4.1 function

    //定义function
    fun sum(a: Int, b: Int): Int {
    	return a + b;
    }
    
    //默认参数
    fun read(b: Array<Byte>, off: Int = 0, len: Int = b.size) {
    }
    
    //可变参数
    fun <T> asList(vararg ts: T): List<T> {
        val result = ArrayList<T>()
        for (t in ts) // ts is an Array
            result.add(t)
        return result
    }
    val a = arrayOf(1, 2, 3)
    
    //扩展对象上的function(替换代理模式), 待扩展对象+方法名+返回值
    fun Any?.funExt(): String {
    	if (this == null) return "null"
    	return toString()+"11111";
    }
    val str = "SSSS";     println (str.funExt());
    
    //若返回值可能为null, 必须显示定义,否则运行时报错
    fun parseInt(str: String): Int? {
    }
    

    4.2 属性

    //扩展属性
    val <T> List<T>.lastIndex: Int{
    	get() = size - 1
    }
    

    4.3 Lambdas

    //lambdas表达式定义
    //单个入参时,默认it
    val sum = { x: Int, y: Int -> x + y };	
    
    //高阶函数 函数作为方法入参
    //示例1--
    fun <T, R> List<T>.map(transform: (T) -> R): List<R> {
    	val result = arrayListOf<R>()
    	for (item in this)
    		result.add(transform(item))
    	return result
    }
    //调用方式: val doubled = ints.map { value -> value * 2 }
    	或是  	ints.map { it * 2 }
    
    //示例2--内联函数
    fun <T> max(collection: Collection<T>, less: (T, T) -> Boolean): T? {
    	var max: T? = null
    	for (it in collection)
    		if (max == null || less(max, it))
    			max = it;
    	return max
    }
    //调用: max(strings, { a, b -> a.length < b.length })
    
    //未使用的参数可使用_代替
    map.forEach { _, value -> println("$value!") }
    

    5. Class

    5.1 Class类和继承

    //定义
    class Invoice { }
    或 class Person(val firstName: String, val lastName: String, var age: Int) {
    		// ...
    	}
    
    //构建函数,一个主,多个次构造函数
    //可自带默认参数
    class Customer(val customerName: String = "")	
    
    //主构造函数是class声明的一部分, 构造函数默认public
    class Customer(name: String) {
    	init {
    		logger.info("Customer initialized with value ${name}")
    	}
    }
    class DontCreateMe private constructor () { }	//构造方法置为private
    
    //次构造函数,可多个
    class Person(val name: String) {
    	constructor(name: String, parent: Person) : this(name) {
    		parent.children.add(this)
    	}
    }
    
    //继承
    class MyView : View {
    	constructor(ctx: Context) : super(ctx)
    	constructor(ctx: Context, attrs: AttributeSet) : super(ctx, attrs)
    }
    
    //覆写方法--overide 
    //kotlin中重写必须明确指定,使用open声明(否则编译报错)可被重写,open的fun必须包含在open的class中
    open class Base {
    	open fun v() {}
    	fun nv() {}
    }
    class Derived() : Base() {
    	override fun v() {}
    }
    
    //覆写规则
    open class A {
    	open fun f() { print("A") }
    	fun a() { print("a") }
    }
    
    interface B {
    	fun f() { print("B") } // interface members are 'open' by default
    	fun b() { print("b") }
    }
    
    class C() : A(), B {
    	// The compiler requires f() to be overridden:
    	override fun f() {
    		super<A>.f() // call to A.f()
    		super<B>.f() // call to B.f()
    	}
    }	
    
    //覆写property
    
    //Abstract
    

    5.2 property和Fields

    class Address { var name: String = ... 	};
    
    //改写getter和setter方法
    val isEmpty: Boolean get() = this.size == 0;
    var stringRepresentation: String
    	get() = this.toString()
    	set(value) {
    		setDataFromString(value) // parses the string and assigns values to other properties
    	}
    
    //private setter
    var setterVisibility: String = "abc"
    	private set
    

    5.3 interface接口

    interface MyInterface {
    	fun bar()
    	fun foo() { }
    }
    class Child : MyInterface {
    	override fun bar() {
    		// body
    	}
    }
    

    5.4 Data Classes 只包含数据的Class

    //针对此种模型,kotlin额外定义了一些扩展方法
    -- equals()/hashCode() pair,
    -- toString() of the form "User(name=John, age=42)",
    data class User(val name: String = "", val age: Int = 0);	//示例1
    
    //copy方法
    val jack = User(name = "Jack", age = 1)
    val olderJack = jack.copy(age = 2)
    

    5.5 泛型Generics

    6. 逻辑操作

    6.1 for循环

    for (item in items) {
    	println(item)
    }
    

    6.2 退出循环-break label

    //退出多重for循环
    lxx@ for (i in 1..10) {
        for (j in 1..10) {
            println("x=$i;y=$j");
            if (i == 5) break@lxx;
        }
    }
    
    //forEach中退出当次循环
    mutableListOf(1, 2, 3,4).forEach {
        if (it == 2) return@forEach
        print(it);
    }
    

    6.3 when

    //替换switch Case
    var grade = when (score) {
    	9, 10 -> "Excellent" 
    	in 6..8 -> "Good"
    	4, 5 -> "Ok"
    	in 1..3 -> "Fail"
    	else -> "Fail"
    }
    
    when {
    	"orange" in items -> println("juicy")
    	"apple" in items -> println("apple is fine too")
    }
    

    6.4替换3目运算符

    val text = if (x > 5)
    			  "x > 5"
    		   else "x <= 5"
    fun maxOf(a: Int, b: Int) = if (a > b) a else b	
    

    15. 其它

    15.1 main函数

    class KotlinTe { 	}
    fun main(args: Array<String>) {
    	var output: String? = "123123";
    	println(ou);
    }
    

    15.2 与java互相调用

    //java中调kotlin
    	1).调用相同
    
    //kotlin中调java
    	1).kotlin中无new关键字,其它属性-方法调用相同
    

    15.3 默认导入

    kotlin.*; 							kotlin.annotation.*; 	kotlin.collections.*;
    kotlin.comparisons.* (since 1.1); 	kotlin.io.*; 			kotlin.ranges.*;
    kotlin.sequences.*; 				kotlin.text.*;	
    
    java.lang.*; 	kotlin.jvm.*;
    

    15.4 kotlin的maven依赖

    IDEA maven工程中创建kt文件时会提示增加kotlin依赖,默认即可。(包括dependency和build两类标签)
  • 相关阅读:
    Web Site 与 Web Application 的区别
    Jquery获取text,areatext,radio,checkbox,select值
    C#怎么样操作world文档中的文字型窗体域?
    DataFormatString 用法
    overload和override的区别
    Apollo安装
    工控机基础
    CAN总线技术基础
    dd命令_Linux dd命令:复制(拷贝)文件,并对原文件进行转换
    Unity2021零基础入门教程
  • 原文地址:https://www.cnblogs.com/Desneo/p/7213709.html
Copyright © 2011-2022 走看看