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

    } ↩︎

相关推荐
Kapaseker11 小时前
实战 Compose 中的 IntrinsicSize
android·kotlin
A0微声z2 天前
Kotlin Multiplatform (KMP) 中使用 Protobuf
kotlin
alexhilton3 天前
使用FunctionGemma进行设备端函数调用
android·kotlin·android jetpack
lhDream3 天前
Kotlin 开发者必看!JetBrains 开源 LLM 框架 Koog 快速上手指南(含示例)
kotlin
RdoZam3 天前
Android-封装基类Activity\Fragment,从0到1记录
android·kotlin
Kapaseker4 天前
研究表明,开发者对Kotlin集合的了解不到 20%
android·kotlin
郑州光合科技余经理4 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
feifeigo1234 天前
matlab画图工具
开发语言·matlab
西岸行者4 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
dustcell.4 天前
haproxy七层代理
java·开发语言·前端