
kotlin
Tom098
工作20年的IT老鸟,做过开发,也做过技术支持,丰富操作系统、网络等IT infurstructure 方面实战经验。精通Java/J2EE技术体系以及Linux下用户空间c编程。下一步该如何走? AI、大数据?
展开
-
kotlin 属性重载
在kotlin中, 不仅可以对方法重载,还可以对属性重载。在java中,在子类中很少重载父类中的属性,虽然这也是可以的。比如下边的例子:open class Apple<T>{ open val info : T? constructor(){ info = null } constructor(info: T){ this.info = info }}class A(info: String): Apple原创 2022-02-24 15:28:55 · 2191 阅读 · 0 评论 -
kotlin backing field
kotlin的class里边的property概念跟java的class里边的feild或者property概念还不太一样。kotlin的代码最终都要转化成Java代码,kotlin的类里边的属性不一定都要对应一个java类里边的属性,必须满足一以下条件之一:1. 使用至少一个缺省accessor(getter or setter)2. 如果使用了定制accessor, 在accessor方法内,有通过feild去访问类的成员变量(Kotlin will generate a backing原创 2022-02-24 15:15:33 · 1731 阅读 · 0 评论 -
kotlin 使用in out限制对集合类只能使用读方法和写方法
结合上一篇java的范型通配符上下届的文章,这里给出kotlin的解决方案。in, out不仅可以用在定一个使用范型的类时,指定该范型类型只能用在方法的返回值或者输入参数,比如像下边这样:interface Source<out T> { fun nextT(): T}fun demo(strs: Source<String>) { val objects: Source<Any> = strs // This is OK, since T原创 2022-02-24 11:45:03 · 1533 阅读 · 0 评论 -
kotlin 什么情况下针对可空对象,可以不使用空安全调用(?.)
在看kotlin exposed源码时,看到如下语句:fun <T> transaction(db: Database? = null, statement: Transaction.() -> T): T = transaction(db.transactionManager.defaultIsolationLevel, db.transactionManager.defaultRepetitionAttempts, db, statement)发现函数参数db是可空原创 2022-02-17 17:45:58 · 3721 阅读 · 0 评论 -
kotlin用it还是this?
由于在kotlin中,可以很容易扩展已有的类,增加新的函数。这是扩展函数中,就可以使用this关键字,指代运行时与该函数关联的类的对象。而有时我们发现在写Lambda时,可以使用it关键字,同时还可以使用this关键字,这是怎么回事?比如下边的代码,在test01()方法中,it指代lambda函数本身的参数,而this,是指Test01这个对象。总之,使用this的地方,都指向一个对象,使用it的地方,都指向该函数本身的参数。至于this指向哪儿,要具体分析。import org.jun原创 2022-02-11 17:33:55 · 4113 阅读 · 0 评论 -
java与Kotlin中常量的定义, 使用public还是private定义常量?
在不使用enum的情况下,在java中定义常量,一般可以通过如下方式定义: private static final String name = "tom"; public static final String name2 = "tom2";这两种方式定义的区别是第一种方式,只有常量所在的类的方法可以访问,不管是静态还是非静态方法都可以访问。第二种方式则是全局的,所有类都可以访问。所以两种方式应对两种场景,private和public关键字可以很好的完成这个任务。而在kotli原创 2022-02-11 09:17:31 · 1797 阅读 · 0 评论 -
kotlin const val与val差别
const val 相当于java的static final修饰的变量,而val相当于java的final修饰的变量。原创 2022-02-10 17:39:43 · 474 阅读 · 0 评论 -
kotlin in out 关键字理解
在kotlin定义范型时,有时会使用到in out关键字。网上很多文章都有介绍这两个关键字的使用,越看越迷糊,比如以下边的食物、快餐、汉堡、食物商店,快餐店、汉堡店为例子:很不理解为什么下边的几行代码前两行会编译通过,而后一个会出错。val consumer1: Consumer<Burger> = FoodConsumer()val consumer2: Consumer<Burger> = FastFoodConsumer()val consumer3: Consu原创 2022-02-10 14:09:37 · 753 阅读 · 0 评论 -
kotlin + springboot,对于DTO的class,所有属性都要加上@JsonProperty注解?
在测试时发现,当使用resttemplate去获取远端数据时,springboot框架无法自动将收到的json数据自动反序列化成指定的类对象。需要将对应的类的每个属性都加上@JsonProperty注解,并注明对应的Json字段名才可以,比如如下:data class Bank( @JsonProperty("account_number") val accountNumber: String, @JsonProperty("trust") val trust: Dou原创 2022-01-28 23:01:16 · 2091 阅读 · 0 评论 -
idea 开发kotlin应用,在kotlin plugin升级到1.6.10之后, println(), listOf()等基本函数无法使用
在使用kotlin plugin 1.6.10,结合spring boot开发时,发现很多kotlin基础包中的函数无法使用,提示无法找到, 但是kotlin-stdlib: 1.6.10和kotlin-stdlib-jdk8:1.6.10明明都在类路径下。重启,删除都不好用。最后发现可以将idea的cache清空,再重启idea,就没有问题了。invalidate idea cache的方法:调出搜索窗口,然后输入"invalidate caches", 回车,在弹出窗口中,选中"clear原创 2022-01-24 20:34:26 · 2915 阅读 · 0 评论 -
kotlin 函数式接口和匿名接口、lambda
package com.example.blogimport java.util.ArrayList//kotlin lambda作为函数参数时://1. 函数作为另外一个函数的形参,可以直接写()-> xxx的形式,不用额外再定义一个函数式接口//2. 在调用时, 世界将形参替换成lambda.//函数式接口fun interface Even{ fun isEven(e: Int): Boolean}//非函数式接口interface Odd{ fun .原创 2022-01-24 16:45:32 · 1444 阅读 · 0 评论 -
kotlin companion object
总结:companion object生成的静态内部类,该内部类不会在其内部保存一个指向该类的实例,而是在外部类有一个feild指向改内部类的实例。并且该内部类不是singleton的,其有一个public的构造方法。半生类里边的所有成员可以被外部类直接访问,省去了通过Outter.Inner.xxx中的调用方式的Innner部分。而一个普通的object修饰的类,其本身内部有一个feild指向了该该类的唯一实例,也即object修饰的类是单类模式。package indi.tomclas原创 2022-01-24 14:12:28 · 2319 阅读 · 0 评论 -
kotlin sealed关键字
//sealed class只能有固定数量的子类,而且必须在当前类里边声明//sealed class的构造方法也是私有的,跟object比较像//enum是定义有限的对象值,二sealed class是定义有限的子类型sealed class MySealedClass { fun action(){ println("I am a sealed class") } object SonClass1 : MySealedClass(){ i.原创 2022-01-22 18:49:06 · 749 阅读 · 0 评论 -
kotlin Elvis Operator(?:)
Elvis OperatorSometimes, when we have a reference, we want to return some default value from the operation if the reference holds anull. To achieve that, we can use anelvis(?:) operator. This is an equivalent oforElse/orElseGetfrom JavaOptionalcla...原创 2022-01-18 10:00:29 · 998 阅读 · 0 评论 -
kotlkin SAM conversion(函数式接口名+抽象方法实现,来代表新创建的一个函数式接口实例)
For example, consider the following Kotlin functional interface:fun interface IntPredicate { fun accept(i: Int): Boolean}Copied!If you don't use a SAM conversion, you will need to write code like this:// Creating an instance of a classval原创 2022-01-17 19:11:10 · 246 阅读 · 0 评论 -
kotlin extension function
kotlin extension function实质上是java的静态函数,这个可以通过bytecode看到。所谓的extension function是指对已有的,别人写的library的class进行扩展,也即在定义方法时,在方法头需要指定调用这个方法的对象类型。比如下边的例子,但是这也只是看起来像是扩展了别人的class,为其增加了一个新的方法,但实质上底层还是通过一个静态方法,将extension function的receiver,作为一个参数传给了该静态方法。package indi原创 2022-01-11 13:46:50 · 890 阅读 · 0 评论