虽然kotlin 为android 官方首选语言,新专案大都也是用kotlin ,但是免不了会有Java的专案要维护或修改,这时就变混合双打,免不了要互相呼叫或继承。
1.Kotlin 呼叫 Java Class
//Kotlin
var mJavaPlayer = Day10Ironman()
mJavaPlayer.JavaIronPlayer("Kotlin Android 30天,从 0 到 ML")
//Java
public class Day10Ironman {
private String mTitle;
private String mPlayer = "kevin";
private String mStartDay = "9/1";
....
}
public void JavaIronPlayer(String title){
this.mTitle = title;
}
Kotlin 呼叫 Java Class Method
//Kotlin
mJavaPlayer.printPlayerInfoJava()
println("Java return IronPlayer = "+mJavaPlayer.ironPlayer())
//Java
public void printPlayerInfoJava(){
System.out.println("Java Title = "+mTitle);
}
Boolean isFunction()
//Kotlin
println("Java is Complete Iron = "+mJavaPlayer.isCompleteIron)
//Java
public boolean isCompleteIron(){
Calendar endDay = Calendar.getInstance();
endDay.set(2021,Calendar.OCTOBER,5);
Calendar mToday = Calendar.getInstance();
long diffDay = (endDay.getTimeInMillis()-mToday.getTimeInMillis())
/ (60*60*24*1000) ;
System.out.println("Java log 剩下"+diffDay+"天完赛");
if((int)diffDay > 30){
return true;
}else {
return false;
}
}
Getter 与 Setter
//Kotlin
println("开赛时间"+mJavaPlayer.getmStartDay()) // 9/1
mJavaPlayer.setmStartDay("9/6")
println("修改开赛时间"+mJavaPlayer.getmStartDay())
//Java
public String getmStartDay() {
return mStartDay;
}
public void setmStartDay(String mStartDay) {
this.mStartDay = mStartDay;
}
处理 Null Safety
//Kotlin
println(mJavaPlayer.ironPlayer().uppercase(Locale.getDefault())) //kevin -> KEVIN
println(mJavaPlayer.nullPlayer()?.uppercase(Locale.getDefault()) ?: "Noman")
//null -> Noman
//Java
@NotNull
public String ironPlayer(){
return mPlayer;
}
@Nullable
public String nullPlayer(){
return null;
}
-----------------------------------------------------------------------------------
2.Java 呼叫 Kotlin Class
//Java
Day8Activity.ironman javaIronPlayer =
new Day8Activity.ironman("Kotlin Android 30天,从 0 到 ML","kevin");
//Kotlin
open class ironman constructor(titleName: String, playerName: String){
//DAY10 JAVA 呼叫常数
companion object{
val startDay: String = "9/6"
@JvmStatic
fun teamName(): String = "Koltin 爱台湾 2021"
}
var mTitle = titleName
var mPlayer = playerName
open fun printPlayerInfo(){
println("Title: $mTitle , Player: $mPlayer ")
}
}
Class Properties
//Java
System.out.println(javaIronPlayer.getMPlayer());
javaIronPlayer.setMPlayer("KEVIN");
System.out.println(javaIronPlayer.getMPlayer());
//Kotlin
var mPlayer = playerName
Companion Object Properties
//Java
System.out.println(javaIronPlayer.Companion.getStartDay());
//Kotlin
....
companion object{
val startDay: String = "9/6"
....
Companion Object Method
//Java
System.out.println(javaIronPlayer.Companion.teamName());
//Kotlin
companion object{
val startDay: String = "9/6"
@JvmStatic
fun teamName(): String = "Koltin 爱台湾 2021"
}
Top-Level function
//Java
String mktTitle = new Day10KtClass().KtTitle();
System.out.println( mktTitle);
//Kotlin Day10KtClass.kt
class Day10KtClass {
@JvmName("KtTitle")
fun getIronTitle2():String {return "Kotlin Class"}
}
@file:JvmName @JvmName
//Java
System.out.println(KotlinMain.javaCallKt());
//Kotlin Main.kt
@file:JvmName("KotlinMain")
package com.ithome.kotlin30dayml
@JvmName("javaCallKt")
fun kotlinMainprint():String{return "kotlin main Hello World"}
fun main(args: Array<String>){
println("Hello World")
}
@JvmField
//Java
Day9Activity.webSpeaker mSpeaker = new Day9Activity.webSpeaker("Java call Kotlin");
System.out.println(mSpeaker.mTitle);
//Kotlin
class webSpeaker(title:String): seminarSpeakers(title) {
@JvmField
var mTitle = title
override fun showTitle() {
println("abstract Tilte = $mTitle")
}
}
@JvmStatic
//Java
System.out.println(Day8Activity.ironman.teamName());
//Kotlin
open class ironman constructor(titleName: String, playerName: String){
//DAY10 JAVA 呼叫常数
companion object{
val startDay: String = "9/6"
@JvmStatic
fun teamName(): String = "Koltin 爱台湾 2021"
}
var mTitle = titleName
var mPlayer = playerName
open fun printPlayerInfo(){
println("Title: $mTitle , Player: $mPlayer ")
}
}
执行结果:
https://kotlinlang.org/docs/java-interop.html
https://kotlinlang.org/docs/java-to-kotlin-interop.html
前面文章透过Pipeline上传nuget package到Artifact feed的时候因为产生...
大家好,我是来自台北教育大学玩游所的硕士生 May,在大学接触到如何写网页後,就毅然踏入了前端这个大...
今天我们要介绍的是python的Pandas,所谓的Pandas就是python里面的其中一个套件。...
DDD 学习资源 ddd-crew 里面有许多关於 DDD 各个面向的 repo,其中这个 repo...
大家好,我是乌木白,今天是铁人赛最後一天,谢谢大家在这些天不管是无意或是有意的点进来参观,都非常感...