Android:Kotlin与Java比较

Android:Kotlin与Java比较Android Kotlin 与 Java 比较一 Kotlin 优势 1 1 优雅的解决 Java 空指针问题 1 1 1 编译期进行空指针检查 1 1 2 精简防空判断代码 1 2 代码精简 1 2 1 精简 Set Get 方法 1 2 2 精简属性调用 1 2 3 精简单例模式二 从 Java 到 Kotlin 平滑过渡 2 1Kotlin 开发环境搭建 2 1 1 若为新项目 则 IDE 创建时选择 Kotlin2 1 2 若已有工程为全 Java 开发 可新建一个 Kotlin 类文件 IDE 会自动配置 Kotlin 开发环境 2 1 3Gradle 中添

一、Kotlin优势

1.1 优雅的解决Java空指针问题

1.1.1 编译期进行空指针检查

在这里插入图片描述
编译器静态分析并警告或编译Error:
在这里插入图片描述




1.1.2 精简防空判断代码

Java代码:

if(a != null && a.b != null && a.b.c != null) { 
    String user = a.b.c.d; } 

Kotlin代码:

val user = a?.b?.c?.d 

1.2 代码精简

1.2.1 精简Set/Get方法

Java代码:

public class User { 
    private String name; public String getName() { 
    return name; } public void setName(String name) { 
    this.name = name; } } 

Kotlin代码:

class User { 
    var name : String? = null } 
user.setName("Java"); String name = user.getName(); 

Kotlin代码:

user.name = "Kotlin" String name = user.name 

1.2.2 精简属性调用

Java代码:

RequestBean requestBean = new RequestBean(); requestBean.method = AppService.METHOD_CASHIER; requestBean.cartId = mCartId; requestBean.merchantOrderInfo = ""; requestBean.merchantOrderId = ""; 

Kotlin代码:

val requestBean = RequestBean().apply { 
    method = AppService.METHOD_CASHIER cartId = mCartId merchantOrderInfo = "" merchantOrderId = "" } 

1.2.3 精简单例模式

Java示例:

public class SingletonDemo { 
    private static SingletonDemo instance = new SingletonDemo(); private SingletonDemo() { 
    } public static SingletonDemo getInstance() { 
    return instance; } public String getTAG() { 
    return "Java"; } } 

Kotlin示例:

object SingletonDemo { 
    fun getTAG(): String { 
    return "Kotlin" } } 

二、从Java到Kotlin平滑过渡

2.1 Kotlin开发环境搭建

2.1.1 若为新项目,则IDE创建时选择Kotlin

2.1.2 若已有工程为全Java开发,可新建一个Kotlin类文件,IDE会自动配置Kotlin开发环境

2.1.3 Gradle中添加kotlin支持

project build.gradle添加支持:

classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" 

module build.gradle添加支持:

implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" 

2.2 Kotlin与Java混编及互操作

2.2.1 Kotlin调用Java

public class User { 
    private String name; public String getName() { 
    return name; } public void setName(String name) { 
    this.name = name; } public int getAge() { 
    return 10; } } 

Kotlin示例:

val user = User() user.name = "Kotlin" println(user.name) println(user.age) 
public class JDPayDeviceUtil { 
    public static String getVersionName(Context context, String packageName) { 
    PackageInfo info = getPackageInfo(context, packageName); if(info != null) { 
    return info.versionName; } return ""; } } 

Kotlin示例:

val versionName = JDPayDeviceUtil.getVersionName() println("$versionName") 

2.2.2 Java调用Kotlin

Kotlin示例:

class KotlinStatic { 
    companion object { 
    var number = 0 fun staticMethod(string: String?) { 
    println(string) } } } 

Java示例:

KotlinStatic.Companion.staticMethod("Java"); 

2.3 Kotlin与主流框架、SDK

可以平滑对接网络框架Retrofit、OkHttp、异步框架RxJava、CameraX等。很多主流框架和Google官方Demo也均使用纯Kotlin实现,如:OkHttp、CameraX。

val mediaType = MediaType.parse("text/x-markdown; charset=urg-8") val requst = Request.Builder() .url("http://...") .post(RequestBody.create(mediaType, "kotlin-okhttp")) .build() val client = OkHttpClient() client.newCall(requst).enqueue(object : Callback { 
    override fun onFailure(call: Call, e: IOException) { 
    TODO("Not yet implemented") } override fun onResponse(call: Call, response: Response) { 
    TODO("Not yet implemented") } }) 

2.4 Kotlin线程/异步操作

继承Thread类:

object : Thread() { 
    override fun run() { 
    println("running thread: ${ 
     currentThread()}") } }.start() 

Kotlin封装类:

thread(start = true) { 
    println("running thread: ${ 
     Thread.currentThread()}") } 

同步线程锁:

@Synchronized fun syncMethod() { 
    println("kotlin synchronized") } fun syncMethod() { 
    println("kotlin none synchronized") synchronized(this) { 
    println("kotlin synchronized") } } 
Log.d("Kotlin","thread id: ${ 
     mainLooper.thread.id}") runBlocking { 
    repeat(8) { 
    Log.d("Kotlin","current thread: ${ 
     Thread.currentThread().id}") delay(1000) } } Log.d("Kotlin", "Blocking Coroutines END") 

异步协程:

override fun onCreate(savedInstanceState: Bundle?) { 
    super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val job = GlobalScope.launch { 
    delay(2000) Log.d("Kotlin", "Coroutines thread id:${ 
     Thread.currentThread().id}") } Log.d("kotlin", "main thread END") } 

2.5 Kotlin的IO操作

Java示例:

public static void writeText(String fileName, String txt) { 
    try { 
    FileOutputStream outputStream = new FileOutputStream(fileName); outputStream.write(txt.getBytes()); outputStream.close(); } catch (Exception e) { 
    e.printStackTrace(); } } 

Kotlin示例:

File(fileName).writeText(txt) File(fileName).appendText(txt) File(fileName).writeBytes(arrayBytes) File(fileName).appendBytes(arrayBytes) val content = File(fileName).readText() val bytes = File(fileName).readBytes() val line = File(fileName).readLines() val bitmap = BitmapFactory.decodeFile(fileName) 

2.6 Kotlin与数据库

Kotlin同样支持SQLite、Room数据库,与Java用法基本一致。

2.7 Kotlin与H5

Kotlin加载网页:

webView.loadUrl("https://www.jd.com/") 

物理返回键返回事件:

override fun onBackPressed() { 
    if(webView.canGoBack()) { 
    webView.goBack() return } super.onBackPressed() } 

Js与Kotlin互操作:

private fun initView() { 
    val webSettings = webView.settings webSettings.javaScriptEnabled = true webView.addJavascriptInterface(JsToKotlin(), "Android") webView.loadUrl("https://www.jd.com/web/KotlinToJs.html") } private fun KotlinCallJs(string: String) { 
    webView?.loadUrl("javascript:kotlinCallJs('$string')") } internal inner class JsToKotlin { 
    @JavascriptInterface fun show() { 
    println("kotlin被js调用了") } } 

2.8 Kotlin与JNI

public class SerialPort { 
    static { 
    System.loadLibrary("nativeJD"); } public native String stringFromJNI(); } 

Kotlin示例:

class MainActivity : AppCompatActivity() { 
    override fun onCreate(savedInstanceState: Bundle?) { 
    super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val string = stringFromJNI() } external fun stringFromJNI(): String companion object { 
    init { 
    System.loadLibrary("nativeJD") } } } 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/213288.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午6:11
下一篇 2026年3月18日 下午6:11


相关推荐

  • pagehelper,pageinfo用法[通俗易懂]

    pagehelper,pageinfo用法[通俗易懂]pagehelper,从pageinfo中取到的total不正确的处理。最近在使用pagehelper时遇到一些问题。2个类似的查询都用的PageHelper.startPage进行分页,A方法pageinfo中取出来的total,pages是正确的,B方法取出来的确不对,pages始终等于1,total始终等于pageSize。很奇怪!仔细对照了两个方法之后找到了原因。方法A:这是se…

    2025年6月20日
    7
  • intellj idea 2021激活码【最新永久激活】

    (intellj idea 2021激活码)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.htmlS32PGH0SQB-eyJsaWNlbnNlSWQi…

    2022年3月26日
    88
  • 操作系统面试题目(linux系统基础面试题)

    文章目录操作系统简介篇解释一下什么是操作系统操作系统的主要功能软件访问硬件的几种方式解释一下操作系统的主要目的是什么操作系统的种类有哪些为什么Linux系统下的应用程序不能直接在Windows下运行操作系统结构单体系统分层系统微内核客户-服务器模式为什么称为陷入内核什么是用户态和内核态用户态和内核态是如何切换的?什么是内核什么是实时系统Linux操作系统的启动过程进程和线程篇多处理系统的优势什么是进程和进程表什么是线程,线程和进程的区别什么是上下文切换使用多线程的好处是什么进程终止的方式进程的终止

    2022年4月12日
    65
  • python二分法排序_二分法排序-Python实现

    python二分法排序_二分法排序-Python实现有一个无序序列 37 99 73 48 47 40 40 25 99 51 先进行排序打印输出 分别尝试插入 20 40 41 数值到序列中合适的位置 保证其有序 1 for 循环实现第一种实现 利用嵌套 for 循环 每次迭代出来的数值进行比较 如果比原表中的数值小 则插入到这个数左面 lst1 37 99 73 48 47 40 40 25 99 51 lst sorted lst1 f

    2026年3月19日
    2
  • hibernate中query.uniqueResult()

    hibernate中query.uniqueResult()Queryq=session.createQuery(“selectt,pfromTeachert,Personpwheret.personid=p.id”);得到的两个对象组成的数组

    2022年7月2日
    27
  • 华为交换机链路聚合trunk_华为删除链路聚合命令

    华为交换机链路聚合trunk_华为删除链路聚合命令文章目录一、为什么要用到聚合二、链路聚合三、拓扑四、基本配置五、部署LinkAggregation-链路聚合一、为什么要用到聚合1、二层环境为什么要用到聚合(1)接入层的流量剧增;(2)现行存储数据剧增;(3)监控网络运行大数据流量;

    2025年7月27日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号