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

    } ↩︎

相关推荐
weixin_440784115 小时前
【HandlerThread实现原理】
android·java·开发语言
天空'之城5 小时前
C 语言工业级通用组件手写 24:互补滤波
c语言·开发语言·互补滤波·嵌入式算法·工业级组件
XR1234567885 小时前
工厂车间无线网络方案对比:AGV漫游哪家强?
开发语言·php
傻啦嘿哟6 小时前
某短视频平台视频爬虫实战:抓取推荐流视频信息,绕过反爬的3种技巧
开发语言·爬虫·python
現実君6 小时前
【硬件进阶】AD22上位替换JLEDA教程
开发语言·php
mubei-1237 小时前
SpringDAO的用法
java·开发语言·数据库
格林威9 小时前
多相机微秒级对齐:硬件触发 vs PTP(IEEE 1588)方案实战对比
开发语言·人工智能·数码相机·机器学习·计算机视觉·视觉检测·机器视觉
初级代码游戏10 小时前
iOS开发 Swift 速记2:三种集合类型 Array Set Dictionary
开发语言·ios·swift
咸鱼翻身小阿橙11 小时前
现在这个四通道出现的问题
学习
峥嵘life12 小时前
Android WiFi 热点 Channel 信道 和 Frequency 频率 转换总结
android·开发语言