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")

    } ↩︎

相关推荐
努力写代码的熊大2 分钟前
c++异常和智能指针
java·开发语言·c++
Yvonne爱编码6 分钟前
JAVA数据结构 DAY5-LinkedList
java·开发语言·python
千秋乐。10 分钟前
C++-string
开发语言·c++
孞㐑¥11 分钟前
算法—队列+宽搜(bfs)+堆
开发语言·c++·经验分享·笔记·算法
yufuu9820 分钟前
并行算法在STL中的应用
开发语言·c++·算法
代码游侠29 分钟前
学习笔记——Linux字符设备驱动开发
linux·arm开发·驱动开发·单片机·嵌入式硬件·学习·算法
charlie11451419133 分钟前
嵌入式C++教程——ETL(Embedded Template Library)
开发语言·c++·笔记·学习·嵌入式·etl
陳103033 分钟前
C++:AVL树的模拟实现
开发语言·c++
zfoo-framework1 小时前
docker desktop
开发语言
李小星同志1 小时前
VID2WORLD: CRAFTING VIDEO DIFFUSION MODELSTO INTERACTIVE WORLD MODELS论文学习
学习