Android之kotlin学习

一、kotlin在Java中引用时,编译app报错程序包xxManager不存在

1、在你的Project下的build.gradle与moudle下的build.gradle下配置相应的参数。 (buildscript一定要在plugins前面,不然会报错)

javascript 复制代码
buildscript {
    ext.kotlin_version = '1.6.20'
    repositories{//一定要写,不然会报错
        google()
        jcenter ()
    }
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}
plugins {
    id 'com.android.application' version '7.4.2' apply false
    id 'com.android.library' version '7.4.2' apply false
}

apply from: "gradle/jenkins.gradle"

2、module/app下 build.gradle中的参数

javascript 复制代码
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'

dependencies {
    implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
    implementation "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"
}

二、kotlin伴生对象:companion object

  1. kotlin中是没有静态函数或方法

(1)JAVA中的静态

1.全局常量和变量需要先声明;

2.类方法也需要声明一下;

3.有一些工具库无法直接使用,每次都需要new一个新的对象出来

(2)kotlin中表示静态的方式

1.使用包级属性[1](#1)和包级函数:主要用于全局常量和工具函数;

2.使用伴生对象:主要用于与类有紧密联系的变量和函数;

3.使用@JvmStatic注解,与伴生对象搭配使用,将变量和函数声明为真正的JVM静态成员。

  1. 伴生对象也可以是有名字的

(1)伴生对象是可以进行命名的

javascript 复制代码
class user(val name: String) {
    companion object Loading{
        fun fromGson(gson: String): String {
            return gson
        }
    }
}

(2)半生对象可以在使用的时候不用名字;

javascript 复制代码
class Person(val name: String) {
    companion object {} // 这里需要一个伴生对象,即使是空对象否则没法做扩展
}

// 因为上面的半生对象是匿名,所以这里使用默认的Companion
// 如果上面使用非匿名如: companion object Loader {}
// 那么这里就需要使用:Person.Loader.fromJson
fun Person.Companion.fromJson(json: String): Person {
    return Person(json)
}

(3)半生对象如果实现接口,那么会提供默认实现

javascript 复制代码
public interface ITask : Context.Element{
   public conpanion object Key : Context.Key<ITask> //默认接口实现
   fun test()
}
javascript 复制代码
public class Test:ITask{
    override val key:Context.key<*> get() = ITask //ITask == ITash.key
}

三、从零开始学习Android和kotlin

持续更新中......

  1. 包级属性是指在包级别定义的属性,而不是在类中。这些属性可以直接通过包名进行访问,而不需要通过类实例。例如:

    // 定义包级属性

    package com.example
    var counter = 0 // 包级属性

    // 在同一个包下的其他文件中,可以直接访问这个属性

    fun incrementCounter() {

    println("Before: $counter")

    counter++

    println("After: $counter")

    } ↩︎

相关推荐
Evand J2 分钟前
TDOA(到达时间差)的GDOP和CRLB计算的MATLAB例程,论文复现,附参考文献。GDOP:几何精度因子&CRLB:克拉美罗下界
开发语言·matlab·tdoa·crlb·gdop
野犬寒鸦3 分钟前
从零起步学习并发编程 || 第七章:ThreadLocal深层解析及常见问题解决方案
java·服务器·开发语言·jvm·后端·学习
陈桴浮海4 分钟前
【Linux&Ansible】学习笔记合集二
linux·学习·ansible
云姜.7 分钟前
java抽象类和接口
java·开发语言
xyq202416 分钟前
Pandas 安装指南
开发语言
xhbaitxl22 分钟前
算法学习day39-动态规划
学习·算法·动态规划
xixixin_26 分钟前
【JavaScript 】从 || 到??:JavaScript 空值处理的最佳实践升级
开发语言·javascript·ecmascript
ZH154558913130 分钟前
Flutter for OpenHarmony Python学习助手实战:数据库操作与管理的实现
python·学习·flutter
m0_7369191041 分钟前
C++中的委托构造函数
开发语言·c++·算法
lsx2024061 小时前
Python3 SMTP发送邮件教程
开发语言