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

    } ↩︎

相关推荐
fei201211061 小时前
(2.4.2) Kotlin从零开始
kotlin
xiaoxiaoxiaolll1 小时前
《Light: Science & Applications》:LSTM实现高灵敏度、宽范围光纤折射率测量|AI赋能光学传感
学习
木易 士心1 小时前
Kotlin vs Swift:现代移动开发的“双子星”全面对比
开发语言·kotlin·swift
他叫自己MR张1 小时前
Android 必知必会 - AndroidStudio、AGP、Gradle、Java、Kotlin版本对应关系(官方最新)
android·kotlin·android studio·agp
I_ltt_Itw,1 小时前
Python协程学习笔记
开发语言·网络·python
大雨淅淅1 小时前
【编程语言】Kotlin:从新手到大神的进阶之路
android·开发语言·kotlin
微声G1 小时前
Kotlin Multiplatform超详细介绍,一篇就够了
android·ios·kotlin
j***12151 小时前
计算机体系结构期末复习3:GPU架构及控制流问题
java·开发语言·架构
xuanloyer1 小时前
linux基础学习--学习bash
linux·学习·bash