android项目中,java调用kotlin代码

来源:互联网 发布:战舰世界爱大狗数据 编辑:程序博客网 时间:2024/06/06 09:26

写在之前

​ 15年底,jetBrains推出了基于jvm的编程语言kotlin,并在官网上附出了怎样使用kotlin编写android的教程

http://kotlinlang.org/docs/tutorials/kotlin-android.html,16年初,发布了kotlin 1.0正式版,jetBrains称kotlin与java可以互相调用,无缝衔接,官方的教程上却只写了将android项目转换成kotlin代码,然后用kotlin去调用java的android教程,这是培养用户使用kotlin的习惯,也就是主要代码用kotlin,然后java有现成的库或者工具,直接用kotlin调,避免重复造轮子。kotlin号称android上的swift,代码精简,生产效率高,确实优势不小,然而,swift之余ios,kotlin之于android,还是有区别的,最明显的就是官方支持,也有一些人指出了kotlin的不足,http://artemzin.com/blog/why-i-dont-want-to-use-kotlin-for-android-development-yet/,而我看来,kotlin目前来说,基本没有公司采用,没有实际的项目,如果采用这个语言编写公司的软件,会不会出什么未知的坑,小坑还好,万一大坑呢,要知道,jetBrains没有提供kotlin转java的工具,也就是说,如果遇坑,就一坑到底了,想想都吓死。

​ 不过,既然按照官方的说法,java可以调用kotlin,而且kotlin的开发指南里是有写的,那么android里面肯定也是能够主要使用java,然后调用kotlin的,有人会说,库基本都是java写的,调用kotlin没有什么实际意义,不过,既然是学习kotlin,学习一门新的知识,最好的方法就是使用它,我们可以使用kotlin写一些简单 工具类,来巩固一下语法。

开始使用

​ 说了这么多废话,开始上代码,其实就是在gradle中加入kotlin的插件就好了.

首先是project 的gradle文件

buildscript {    ext.kotlin_version = "1.0.1"  //加上这个,至于为什么是1.0.1待会解释    repositories {        jcenter()    }    dependencies {        classpath 'com.android.tools.build:gradle:2.1.0-alpha4'//这个不用管        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"        //加上这个⬆️    }}

然后是module的gradle文件

apply plugin: 'com.android.application'apply plugin: 'kotlin-android' //加上插件...dependencies {    compile fileTree(include: ['*.jar'], dir: 'libs')    ...     compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" //加上库}

上面那个kotlin-version指向的是jcenter仓库http://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-compiler/最新的版本

Demo

代码是在android中运行的

kotlin代码

data class Student(val name:String,val sex:Char,val age:Int,val course:Array<String>){}

java调用代码

    public void demo() {        Student[] students = new Student[]{                new Student("x1",'男',14,new String[]{"数学","语文"}),                new Student("x2",'女',15,new String[]{"英语","语文"}),                new Student("x3",'男',16,new String[]{"化学","语文"}),                new Student("x4",'女',17,new String[]{"物理","语文"}),        };        for (Student student : students) {            Log.v(TAG,student.toString());        }    }
0 0
原创粉丝点击