kotlin和Java的相互调用示例详解
前言
互操作就是在kotlin中可以调用其他编程语言的接口,只要它们开放了接口,kotlin就可以调用其成员属性和成员方法,这是其他编程语言所无法比拟的。同时,在进行java编程时也可以调用kotlin中的api接口。
1.在kotlin中调用java方法
kotlin和java是两种不同的语言,所以在互相调用的时候,会有一些特殊的语法。kotlin中对象属性默认就带有setter和getter方法,所以在kotlin中调用java时直接变量名点属性就可获取到属性的setter和getter的一些操作。如下面的java对象,在kotlin中也可以直接maccount.setaccount("秦川小将");或者maccount.getaccount();这样调用。
在kotlin中调用java中的void方法和字符串
java示例:
public class account { private string account; private string token; public string getaccount() { return account; } public void setaccount(string account) { this.account = account; } public string gettoken() { return token; } public void settoken(string token) { this.token = token; } public string getdate() { return new simpledateformat("yyyy-mm-dd hh:mm:ss", locale.china).format(new date()); } }
kotlin示例:
val maccount = account() maccount.account = "秦川小将" maccount.token = "0xbe803e33c0bbd4b672b97158ce21f80c0b6f3aa6" println(maccount.account) println(maccount.token) println(maccount.date)
log输出:
.../com.sample.app i/system.out: 秦川小将 .../com.sample.app i/system.out: 0xbe803e33c0bbd4b672b97158ce21f80c0b6f3aa6 .../com.sample.app i/system.out: 2018-01-31 10:50:48
在kotlin中调用java数组
java示例:
public class books { public list<string> getbookslist(){ list<string> mbooks = new arraylist<>(); mbooks.add("雪祭"); mbooks.add("惊蜇"); mbooks.add("风起陇西"); mbooks.add("山河袈裟"); mbooks.add("自在独行"); mbooks.add("浮生六记"); mbooks.add("撒哈拉的故事"); mbooks.add("仓央嘉措诗传全集"); return mbooks; } }
kotlin示例:
val mbookslist = books() val mbooks = mbookslist.bookslist for (book in mbooks){ println("$book") }
log输出:
.../com.sample.app i/system.out: 雪祭 .../com.sample.app i/system.out: 惊蜇 .../com.sample.app i/system.out: 风起陇西 .../com.sample.app i/system.out: 山河袈裟 .../com.sample.app i/system.out: 自在独行 .../com.sample.app i/system.out: 浮生六记 .../com.sample.app i/system.out: 撒哈拉的故事 .../com.sample.app i/system.out: 仓央嘉措诗传全集
在kotlin中调用java静态成员
java示例:
public class dateutils { public static string getdate() { return new simpledateformat("yyyy-mm-dd hh:mm:ss", locale.china).format(new date()); } }
kotlin示例:
val mdate = dateutils.getdate() println("$mdate")
log输出:
.../com.sample.app i/system.out: 2018-01-31 10:50:48
2.在java中调用kotlin方法
在java中给kotlin中对象的属性赋值
kotlin示例:
class datautils { // 基本数据类型 var mbyte: byte? = null var mshort: short? = null var mint: int? = null var mchar: char? = null var mlong: long? = null var mfloat: float? = null var mdouble: double? = null var mboolean: boolean? = null // 引用数据类型 var mname: string? = null }
java示例
datautils mdata = new datautils(); mdata.setmint(100000000); mdata.setmchar('a'); mdata.setmlong(system.currenttimemillis()); mdata.setmfloat(100.0f); mdata.setmdouble(100.0); mdata.setmboolean(true); system.out.print("----------基本数据类型----------\n"); system.out.print(mdata.getmint()+"\n"); system.out.print(mdata.getmchar()+"\n"); system.out.print(mdata.getmlong()+"\n"); system.out.print(mdata.getmfloat()+"\n"); system.out.print(mdata.getmdouble()+"\n"); system.out.print(mdata.getmboolean()+"\n"); system.out.print("----------引用数据类型----------\n"); mdata.setmname("秦川小将"); system.out.print(mdata.getmname()+"\n");
log输出
.../com.sample.app i/system.out: ----------基本数据类型---------- .../com.sample.app i/system.out: 100000000 .../com.sample.app i/system.out: a .../com.sample.app i/system.out: 1517379001995 .../com.sample.app i/system.out: 100.0 .../com.sample.app i/system.out: 100.0 .../com.sample.app i/system.out: true .../com.sample.app i/system.out: ----------引用数据类型---------- .../com.sample.app i/system.out: 秦川小将
注:在kotlin中char类型已经不再是数字类型了。
在java中调用kotlin中函数方法和带参方法
kotlin示例
class datatest{ // fun方法 fun doprint(){ println("kotlin中的函数方法doprint()") } // 带参数fun方法 fun setphone(phone: string) { println("$phone") } }
java示例
datatest mdata = new datatest(); // mdata.doprint(); // 调用kotlin中的方法,并携带参数 mdata.setphone("176*****200");
log输出:
.../com.sample.app i/system.out: kotlin中的函数方法doprint() .../com.sample.app i/system.out: 176*****200
在java中调用kotlin中静态的成员
如果一个类中所有的成员都是静态成员,将class改为object就不用每个方法都用companion object{}包裹了。
kotlin示例
object kotlinutils { fun getname(): string { return "秦川小将" } fun add(number1: double, number2: double): double { return number1 + number2 } }
java示例
string mname = kotlinutils.instance.getname(); log.e("输出", mname); double mnumber = kotlinutils.instance.add(2.0, 3.0); log.e("输出", double.tostring(mnumber));
log输出:
.../? e/输出: 秦川小将 .../? e/输出: 5.0
如果只有个别成员是静态成员时,需要将成员用companion object {}将成员包裹起来。
kotlin示例
class kotlinutils { //...... companion object { fun name(): string { return "秦川小将" } } }
java示例
string mname = kotlinutils.companion.name(); log.e("输出", mname);
log输出:
.../? e/输出: 秦川小将
注意:两种静态写法调用方法是不一样,第一种写法是通过 instance 关键字,第二种写法是通过companion关键字。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。