为什么要用Kotlin代替Java

RDMA性能调优实战:如何用ib_*命令榨干你的Mellanox网卡带宽? 本文深入探讨了如何利用ib_*命令工具集对RDMA网络进行深度性能调优,以充分释放Mellanox网卡的带宽潜力。文章从理解Send/Write/Read三种核心通信原语的差异入手,逐步指导读者通过调整消息大小、队列深度、内联数据等关键参数,并结合系统级的NUMA绑定、中断亲和性等优化策略,实现从基准测试到逼近硬件极限的性能提升。 阅读详情

我想告诉你一个名为Kotlin的新编程语言,以及为什么你应该为你的下一个项目考虑它。我曾经更喜欢Java,但去年我发现自己只要能够编写Kotlin,在这一点上我真的想不出Java会是一个更好的选择。

它是由JetBrains开发的,事实上这些是IDE套件背后的人,比如IntelliJ和ReSharper, 在Kotlin中真的很闪亮。它实用而简洁,使编码成为令人满意和高效的体验。

虽然Kotlin编译了JavaScript和很快的机器代码,但我将专注于它的主要环境,即JVM。
所以这里有几个原因你应该完全切换到Kotlin(没有特别的顺序):

0 # Java互操作性

Kotlin与Java可以100%互操作。使用Kotlin的时候我们可以继续使用老的Java库。你喜欢用的java第三方框架在kotlin项目中仍然可用,而且用kotlin写的框架同样可以用在Java项目中

1# 熟悉的语法

Kotlin并不是学术界的奇怪语言。任何来自面向对象编程的程序员都熟悉它的语法,并且可以从一开始就或多或少地理解它。当然,与Java有一些不同之处,例如重写的构造函数或val var变量声明。下面的代码段介绍了大部分基础知识

class Foo {
    
val b: String = "b"     // val 表示不可修改的变量
    
var i: Int = 0          // var 表示可以修改的变量
    
fun hello() {
        
val str = "Hello"
        
print("$str World")
    }
    
fun sum(x: Int, y: Int): Int {
        
return x + y
    }
    
fun maxOf(a: Float, b: Float) = if (a > b) a else b
}

2# 字符串插值

就好像String.format(),在Kotlin中内置了一个更智能,更易读的字符串格式化功能

val x = 4
val y =7
print("$x 和$y的总和是$(x+y)") // 4 和7的总和是11

3# 类型推断

Kotlin会在您认为可以提高可读性的地方推断您的类型:

val a =“abc”//类型推断为String 
val b = 4 //类型推断为Int 
val c:Double = 0.7 //明确声明类型
val d:List <String> = ArrayList()//明确声明类型

4# 智能类型转换

如果可能,Kotlin编译器会跟踪您的逻辑和自动转换类型。这意味着您不用在做instanceof判断之后做显示的类型转换

if(obj is String){
    print(obj.toUpperCase())//这里不用做显示类型转换
}

5# == 和 ===

== 等效于java中的equals(),=== 等效于java中的 ==

val john1 = Person("John")
val john2 = Person("John")
john1 == john2    // true  (structural equality)
john1 === john2   // false (referential equality)

6# 默认参数

方法有多个不同参数版本的时候,不需要定义多个重载函数

fun build(title: String,width: Int = 800,height: Int =600){
    Frame(title,width,height)
}

7#命名参数

结合默认参数,命名参数消除了对构建器的需求:

build("PacMan", 400, 300)                           // equivalent
build(title = "PacMan", width = 400, height = 300)  // equivalent
build(width = 400, height = 300, title = "PacMan")  // equivalent

8# When 表达式

使用when表达式代替switch

when (x) {
    1 -> print("x is 1")
    2 -> print("x is 2")
    3,4 -> print(x is 3 or 4)
    in 5..10 -> print("x is 5,6,7,8,9 or 10")
    else -> println("x is out of range")
}

而且when表达式可以赋值给变量

val res: Boolean = when {
    obj == null -> false
    obj is String -> true
    else -> throw IllegalStateException()
}

9# 属性

自定义的set和get方法可以添加到public字段,这意味着我们可以通过隐式的getter和setter来避免臃肿的代码

class Frame{
    var width: Int = 800
    var height: Int =600
    val pixels: Int
    get () = width*height
}

10# 数据类

使用java编写一个POJO,需要重写getter和setter,toString,equals等方法,在Kotlin中实现类似的功能十分简洁

data Persron(val name: String,var email: String,var age: Int)
val john = Person("John","john@gmail.com",24)

11# 运算符重载

可以重载预定义的一组运算符提高可读性

data Vec(val x: Float, val y: Float){
    operator fun plus(v: Vec) = Vec(x + v.x,y + v.y)
}
val v = Vec(2f,3f) + Vec(4f,1f)

12# 解构声明

一些对象可以被解构,特别是在遍历map的时候有用

for((key, value) in map){
    print("Key: $key Value: $value")
}

13# 范围

可读性秒杀java

for (i in 1..100) { ... } 
for (i in 0 until 100) { ... }
for (i in 2..10 step 2) { ... } 
for (i in 10 downTo 1) { ... } 
if (x in 1..10) { ... }

14# 扩展函数

还记得你第一次使用java给List排序吗?在List中你找不到sort方法。然后你不得不通过google学习Collections.sort()。

如果只有一种方法可以向旧类添加新函数; 这样您的IDE可以帮助您在代码完成中找到正确的功能。在Kotlin你可以做到这一点:

fun String.replaceSpaces(): String { 
    
return this.replace('','_')
} 
val formatted = str.replaceSpaces()

15# 空指针安全

在java中如果一个引用指向null,在使用该引用时可能会抛出NullPointException。在Kotlin中将引用分为两种非空类型和可空类型。默认的就是非空类型,可空类型在类型后面添加?

var a: String = "abc"//默认非空类型
a = null //编译报错

var b:String? = "xyz"//可空类型
b = null //没问题

无论何时访问可空类型,Kotlin都会强制您防范NPE:

val x = b.length //编译错误:b可能为null

虽然这看起来很麻烦,但由于它的一些功能,它真的很轻松。我们仍然有智能强制转换,它会尽可能地将可空类型转换为非null:

if(b == null)return
val x = b.length //没问题

我们也可以使用安全调用?.,其值为null而不是抛出NPE

val x = b?.length // x的类型是可以为空的Int

安全调用可以链接在一起,以避免我们有时用其他语言编写的嵌套if-not-null检查,如果我们想要一个默认值,null我们可以使用elvis运算符?::

val name = ship?.captain?.name?:“unknown”

如果这些都不适合您,并且您绝对需要NPE,则必须明确要求:

val x = b?.length?:throw NullPointerException()//与下面相同
val x = b!!.length //与上面相同

16# 更好的Lambdas

在可读性和简洁性之间完美平衡,这得益于一些聪明的设计选择。语法首先是直截了当的

val sum = {x:Int,y:Int  - > x + y} // type:(Int,Int) - > Int 
val res = sum(4,7)// res == 11

这里有聪明的一点:

  1. 如果lambda是方法的最后一个或唯一参数,则可以移动或省略方法括号。
  2. 如果我们选择不声明单个参数-lambda的参数,它将在名称下隐式声明it。

这些事实相结合,使以下三行等效:

numbers.filter({x  - > x.isPrime()})
numbers.filter {x  - > x.isPrime()} 
numbers.filter {it.isPrime()}

这使我们能够编写简洁的功能代码

persons
    .filter {it.age> = 18} 
    .sortedBy {it.name} 
    .map {it.email} 
    .forEach {print(it)}

[QMT和ptrade量化交易小白入门]-112、小市值热点概念交易策略,回测5年20倍 本专栏主要是介绍QMT和ptrade的基础用法,常见函数,写策略的方法,也会分享一些量化交易的思路,大概会写200篇左右。QMT的相关资料较少,在使用过程中不断的摸索,遇到了一些问题,记录下来和大家一起沟通,共同进步。 阅读详情

相关推荐

SAP IDOC实战:如何用EDI实现跨公司采购订单自动生成销售订单(附完整配置步骤)

本文详细解析了如何利用SAP IDOC与EDI技术,实现跨公司采购订单自动生成销售订单的完整流程。通过实战案例,从业务蓝图设计、输出条件配置、伙伴参数设定到IDOC消息类型处理,提供了清晰的配置步骤与故障排查指南,帮助企业打通内部业务流,构建高效的自动化闭环。

weixin_29215815的博客 729

【深入kotlin】 - 与Java互操作:java调用kotlin

Kotlin 类的一个属性编译后,会产生 3 种 Java 对象: 如果 kotlin 属性名为 is 开头(Bool 类型),get 方法名 = 属性名,set 方法名则是将 is 替换为 set,字段名=属性名。当对 kotlin 属性使用该注解修饰后,这个属性就变成一个实例变量(public),kotlin 编译器不会生成 get/set 方法。在 java 中直接通过字段名进行访问。Kotlin 顶层对象会编译成静态成员、静态方法。类名是文件名+Kt。...

kmyhy的专栏 6073

实测避坑:用SGM61720做BUCK电路,SW引脚电压尖峰怎么压下去?

本文针对SGM61720在BUCK电路中SW引脚电压尖峰问题,提供实测避坑指南。通过分析电压尖峰、过冲等核心问题,详细讲解自举电阻调整、RC缓冲电路计算和PCB走线优化三大解决方案,帮助工程师有效降低SW引脚电压尖峰,提升系统稳定性和EMI性能。

weixin_42634811的博客 215

kotlin和java_Kotlin技术入门以及和Java对比.md

一.Kotlin基础环境搭建Android studio的版本大于3.0直接支持Kotlin语法,直接创建即可;Android studio的版本小于3.0,步骤如下:需要下载插件插件搜索 Kotlin下载安装后创建一个项目 打开标签栏Code>Convert Java file to Kotlin在项目的App Moudle里面直接添加如下,然后同步更新即可apply plugin: 'k...

weixin_31064267的博客 378

GEE入门之路(从【初学者】角度,大白话)——附海面风速插值代码

非常初级的GEE入门教程!大白话!有手就行!附海面风速插值代码,克里金插值,时间插值。

weixin_46812066的博客 4086

飞牛fnNAS个人小账本导入微信账单

本文介绍了将微信支付账单导入ezBookkeeping个人记账系统的详细方法。首先通过微信申请导出账单文件,接收后需进行Excel预处理:删除前导行、添加账户和分类列、整理金额格式等。在ezBookkeeping中需预先设置"微信"分类和账户。导入时需注意列映射关系,包括交易时间、账户名称等关键字段的对应设置。文章还提到处理交易标签、格式转换等细节问题,并建议避免使用"修改余额"功能。该方法同样适用于支付宝账单导入,解决了直接导入可能出现的格式不兼容问题。

dgnankai的专栏 482

kotlin会替代java_什么是Kotlin? Java替代说明

kotlin会替代java Kotlin是一种通用,免费,开放源代码,静态类型的“实用”编程语言,最初是为JVM(Java虚拟机)和Android设计的,结合了面向对象和功能性编程功能。 它着重于互操作性,安全性,清晰度和工具支持。 针对许多处理器的针对JavaScript ES5.1和本机代码(使用LLVM)的Kotlin版本也在生产中。 Kotlin于2010年起源于IntelliJ I...

cxu0262的博客 1019

基于YOLOv8与UI界面的校园垃圾分类督导系统

YOLO(You Only Look Once)是目前最为广泛使用的目标检测算法之一。它通过一次前向传递即完成目标检测,具有极高的速度与效率。YOLOv8是YOLO系列的最新版本,相比于之前的YOLO版本,YOLOv8在速度、精度、检测能力等方面都有了显著的提升。本项目通过结合YOLOv8模型与UI界面,成功实现了校园垃圾分类督导系统。该系统能够自动识别不同类型的垃圾,并通过UI界面实时展示垃圾分类的结果。

YOLO 337

Kotlin 完全取代 Java:一场渐进式的技术革命(技术、成本与综合评估)

摘要 Kotlin 作为现代编程语言,凭借空安全、数据类、协程等特性在 Android 开发中已基本取代 Java,但在服务端和大数据领域仍面临 Java 成熟生态的挑战。虽然 Kotlin 与 Java 完全互操作,技术迁移可行,但企业级系统重构涉及高昂的代码重写、人员培训等成本,使得全面替代成为渐进过程。Java 通过快速迭代(如虚拟线程)保持竞争力。未来 Kotlin 可能在 Android 和新技术场景占据优势,而 Java 仍将在传统企业系统中长期存在,两者将形成互补而非完全替代的关系。

保持专注,保持热爱 945

SAP_MM模块采购订单显示含税价&不含税简介

不含税价(Net Price):基础商品价格,不包含税金。含税价(Gross Price):基础价格加上适用税金后的总价。在SAP中,采购订单通常以不含税价为基础,通过配置税码和定价方案,系统会自动计算含税总价。

我小时候很黑的博客 2303

uniapp+google map不显示

uniapp+renderJS+google map开发安卓版APP非小程序,google map小叉号不显示,google map自定义marker右上角的小叉号如何去掉,uniapp+google map不显示

renkai721的专栏 527

抛弃Java 改用 Kotlin 的六个月,你不知道的小秘密。

自 2017 年 Kotlin 被 Google 认证为 Android 开发官方编程语言后,最常提及的一个问题:是否应该学习 Kotlin 进行 Android 开发?相比传统 Java 语言有什么优势? 如今答案十分清晰了 —— 这几年,Google 大力发展基于 Kotlin 的 Androidx 库、Jetpack 库、Compose 库,很多新特性都是为 Kotlin 优化的。可以说,不懂 kotlin,今后在 Android 开发领域标准库的发展上将很受阻碍,Android 开发由 Java 转

老皮的博客 1963

Python爬虫实战:逆向工程与异步处理攻克Pinterest无限滚动瀑布流

我们将从零开始,逐步分析其数据接口,构建一个功能完整的爬虫,并深入探讨反爬虫策略的应对、性能优化以及数据存储等高级主题。: 在实际爬取中,你需要先访问一次Pinterest主页,获取初始的Cookie和CSRF Token,然后再发起API请求。: Python爬虫,Pinterest,无限滚动,瀑布流,异步IO,httpx,逆向工程,API接口,动态内容,反爬虫。你会很快发现一些关键的请求模式。:页面初始加载有限内容,随着用户滚动,新的图片块通过AJAX动态加载,实现“永无止境”的浏览。

2201_76125261的博客 552

kotlin代替java实体类

KOTLIN实体类写法 kotlin是一种谷歌专用语言,可以与java混合使用,在2019-2020年期间,kotlin的使用用户越来越多,多数java大型项目开始向kotlin项目转变,其中,最常见的是java的实力类使用kotlin代替书写. 基本规则 kotlin实体类变量起名方式是这样的 var i:String=“hello”; 而kotlin中默认不运行为空值(默认不需要分号,但是加分...

weixin_43486804的博客 3960

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Kotlin 代替Java接口回调,就这么简单

通常三步:1 定义接口和方法;2 使用接口中方法;3 继承接口并实现方法;1定义抽象方法 2 直接调用 3直接实现。使用Kotlin呢?

赵星海 565

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

lambda java kotlin,java-Kotlin:使用lambda代替功能接口?

在Java中,我们可以做到这一点EventHandler但是在Kotlin中,我试图复制该行为以替换此行为:Events.handler(Handshake::class, object : EventHandler {override fun handle(event: Handshake) {println(event.sent)}})用起来比较方便:EventHandler出于某种原因,参考...

weixin_34135138的博客 210

Kotlin mapOf 代替java的map操作

fun main() { //创建map val map = mapOf("Jacky" to 20, "Jason" to 18, "Jack" to 10); mapOf(Pair("Jimmy", 10), Pair("Jacky", "20")) //读取map的值 println(map["Jacky"]) println(map.getValue("Jason")) println(map.getOrElse("Rose") { "NoR.

丿灬安之若死 3542

Android Kotlin基础学习手册——入门指南+强化实战_谷歌代替java的语言

对于面试,一定要有良好的心态,这位小伙伴面试美团的时候没有被前面阿里的面试影响到,发挥也很正常,也就能顺利拿下美团的offer。小编还整理了大厂java程序员面试涉及到的绝大部分面试题及答案,希望能帮助到大家,也祝愿大家都能够升职加薪!本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录需要这份系统化的资料的朋友,可以点击这里获取编整理的资料能够帮助到大家!也祝愿大家都能够升职加薪!本文已被。

2401_84691757的博客 1033

kotlin 语法跟 java 的不同

1.extends 用 (冐号):代替。MainActivity extends Activity,   现在是 MaiActivity :Activity() 2.interface 用(逗号),代替。 A interface B{}           现在是 ,B{} 3.override 不现进 注解,而是用到了方法中               这样写 overrid...

kingwjh的专栏 232

kotlin与java区别_Java和Kotlin的区别

1.继承用(冒号):代替java:MainActivity extends Activitykotlin: MaiActivity :Activity()2:interface 用(逗号),代替Java:A interface B{}kotlin:,B{}3.override 不现进 注解,而是用到了方法中override fun onCreate(savedInstanceState: Bund...

weixin_39842937的博客 3653

Kotlin使用心得:提升开发效率的实战技巧(一)

在 Kotlin 语言下的开发让我深刻感受到它的简洁和高效。从 `val` 的防御性编程,到 `data class` 的简化代码,再到 `sealed class` 和 `Channel` 提升代码的可维护性,Kotlin 让编码变得更加优雅

居然是阿松的博客 510

kotlin编译失败_将Java类文件转换为Kotlin会导致编译错误

我有一个运行良好的Java类文件,但是如果将其转换为Kotlin,则会出现一些问题.这是Java版本public class CallbackWrapper implements Callback {private Wrapper wrapper;public CallbackWrapper(Wrapper wrapper) {this.wrapper = wrapper;}public void...

weixin_39630140的博客 1138

lambda java kotlin,为什么Kotlin调用 java 时可以使用Lambda?

如果 lambda 是一个函数的唯一参数,那么调用这个函数时可以省略圆括号如果 lambda 所表示的匿名函数只有一个参数,那么可以省略它的声明以及->符号(默认会用it来给省略的参数名命名)OK,从代码三的结构中,能够更清晰的看出,这里的 view.setOnClickListener 函数是接收了一个 lambda 作为参数。而在 Kotlin 中,什么样的函数才能把lambda(也即另...

weixin_29692851的博客 335

关于android:Kotlin中的枚举注释类型

关于android:Kotlin中的枚举注释类型

u010194271的博客 1040

Kotlin与Java语法的比较

Java的知识就不想多讲了,这里只比较与Kotlin语法不同的地方,方便快速上手,适合给有经验的安卓开发看。1.关于基础变量Kotlin 的基本数值类型包括 Byte、Short、Int、Long、Float、Double 等,都是大写的开头,java的写法是byte、short、int、long、float、double,实际上就是直接帮你封装成一个对象了。例如:JAVA :int a = 3;...

u014369799的博客 717

四、Kotlin类和对象

kotlin和java的区别:

chenyiluo94的博客 435
上一篇: Java并发系列之7 深入理解线程池ThreadPoolExecutor
下一篇: Java并发系列之八Semaphore
字节小站
博客等级 码龄10年 53粉丝 55原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值