写在最前头,作为一个java老兵,对于开发更多的是追求一种快直接,简洁,不愿意去写无聊的代码,例如get set 等。而kotlin刚出来的时候,不咋感冒,毕竟其开始是编译成javascript的,对于一个非前端的死忠,还是不怎么感冒的。近期偶然机会看到有android开发使用kotlin的,而且展示了一段java和kotlin的获取view的代码,立马提起了兴趣,由于我是做服务端的,在一阵度娘后,发现了这篇文章,于是自己将原有springboot工程改写成了kotlin和java的混编项目。于是乎,觉得还是翻译一下吧。
然后啰嗦一下,这篇不是翻译,只捡干货。
kotlin是什么
1、kotlin是流行的ide idea的公司 jetbeans出的一种基于jvm的语言
2、它是静态编译的语言,然后有许多的动态语言特性,让你的代码更简洁和清晰
3、它有个外号 swift on android,如同ios的swift语言一样,也如同swift之于objective-c。
所以用它做android开发很爽,号称减少起码一半的代码
4、有些很吸引java老兵的特性,data class 自动生成get set,在也不用写get set方法,虽然eclipse等能帮我生成,但保不齐实体会改,总要补一枪。
扩展,能不用继承就可以扩展类的方法,从此不在为一堆的utils犯愁了。
5、和java有很好的互操作性,可以直接使用java已有的框架和类库,哪样舒服哪样来。
springboot项目引入kotlin
1、pom.xml中加入依赖和plugin
如果用idea 的话,直接config kotlin工程就行
也就是加入了
|
和maven的plugin
|
当然了我在src/main下建立了一个kotlin目录用于存放kotlin代码
然后你就可以new 一个 kotlin 文件了,文件名称随意。
来个control的例子
@RestController
class CustomerController (val repository:CustomerRepository) {
@GetMapping("/")
fun findAll() = repository.findAll()
@GetMapping("/{name}")
fun findByLastName(@PathVariable name:String)
= repository.findByLastName(name)}
是不是很熟悉啊,springboot里的注解直接使用。
例如@Bean @Autowired 等都是一样一样的
也就是说你想吧springboot的application等代码改成kotlin是完全可行的,只是语法有点区别,其它都一样
注意点:
1、kotlin注解不支持数组的方式。必须改换成如下写法
@RequestMapping(method = arrayOf(RequestMethod.GET))
@EnableAutoConfiguration(exclude = arrayOf(Foo::class))
.
2、属性注入需要转义符号\,因为kotlin自身支持模板$
@Value("${some.property}")
.
3、对于bean和需要被事务管理的,比如biz service之流,在class前面加上open。因为kotlin默认类是final。
@Component
open class MyTestBizImp :MyTestBiz{
override fun doFirst(){
....
}
}
java怎么调用kotlin
比如是用mybatis,使用到mapper xml文件这个时候
使用package 名+类名就行了和java是一致的。例如
package xx.xx.xx
class MyEntity {
var name:String =""
}
interface TestMapper {
}
这样mybatis的mapper接口定义及使用到的实体均可以使用kotlin来编写。
最后就是用idea,其中自带kotlin编辑器,拷贝java代码到kotlin编辑器,它会自动把java代码转成kotlin的 so cool。
总结
作为一个具有强迫症和洁癖的开发来说,使用kotlin来编写业务代码是一种比较可行的方式,尤其是混编模式下,旧有的功能代码不用调整,极大的保护了资产和提供了尝试的可行性。
其简洁的语法尤其适应于业务代码的编写,哪些interface和其imp可以丢在一个文件里了,反正也没别的模块用^_^