一、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
- kotlin中是没有静态函数或方法
(1)JAVA中的静态
1.全局常量和变量需要先声明;
2.类方法也需要声明一下;
3.有一些工具库无法直接使用,每次都需要new一个新的对象出来
(2)kotlin中表示静态的方式
1.使用包级属性[1](#1)和包级函数:主要用于全局常量和工具函数;
2.使用伴生对象:主要用于与类有紧密联系的变量和函数;
3.使用@JvmStatic注解,与伴生对象搭配使用,将变量和函数声明为真正的JVM静态成员。
- 伴生对象也可以是有名字的
(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
持续更新中......
-
包级属性是指在包级别定义的属性,而不是在类中。这些属性可以直接通过包名进行访问,而不需要通过类实例。例如:
// 定义包级属性
package com.example
var counter = 0 // 包级属性// 在同一个包下的其他文件中,可以直接访问这个属性
fun incrementCounter() {
println("Before: $counter")
counter++
println("After: $counter")
} ↩︎