<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
class TestJava { public void toNotNull(@NotNull String title) {} public void toNull(String title){} }
kotlin
中呼叫java方法,引數時,如果含有Kotlin關鍵字,必須增加 反引號 ``
public Object object; //使用kotlin中關鍵字命名的方法 public void is() { }
testJava.`is`() testJava.`object`
在Kotlin中呼叫帶有介面引數的方法時,如果這個介面只有一個方法,那麼就可以通過 lambda 表示式實現 SAM轉換,從而簡化我們的程式碼。
範例如下:
public class TestJavaSam { void singleFun(@NotNull IListener iListener) {} void noParameter( @NotNull IListener iListener,int sum) {} void noParameterClean(int sum,@NotNull IListener iListener) {} } interface IListener { void onClick(); }
fun main() { val sam = TestJavaSam() sam.singleFun { } sam.noParameter({ //如果更改一下java方法引數的順序,那麼就會更簡潔,如下 },123) sam.noParameterClean(123){ } }
在Kotlin
中,有些方法並不想暴露給Java呼叫,這時就可以增加這個註解在方法上。
@JvmSynthetic fun toMain() { }
此時toMain() 在Java中將無法呼叫到。
在java中使用Kotlin
的擴充套件函數時,我們都會使用相應的類名+Kt 去呼叫相關的方法,有時候我們想自定義相應的工具類,就顯得稍顯麻煩,如下:
比如我們有一個頂級擴充套件函數,位於 UiExpand.kt 中:
fun Int.px() {} **Java中呼叫 ** //Java呼叫kotlin類-(UiExpand)-Int.px() 擴充套件方法 UiExpandKt.px(20);
如上所示,在Java中呼叫時,我們必須已檔名+kt字尾才可以呼叫。
通過給 UiExpand.kt 包名上增加 @file:JvmName(“Ui”),我們就可以實現自定義生成的類名去呼叫
如下:
Ui.px()
在Java中,我們去呼叫Kotlin 的 成員變數 時,編譯器都會幫我們自動生成相應的 get,set方法,這很符合Java Bean的寫法,但是有些是有我們只是想直接去呼叫,這個時候就可以這樣去做。
data class TestKotlinBean( @JvmField val message: String, @JvmField val title: String) **Java中呼叫 ** TestKotlinBean testKotlinBean = new TestKotlinBean("",""); String message = testKotlinBean.message; String title = testKotlinBean.title;
當然對於 如下的範例,就算不用增加上面的註解,在java也都是可以直接呼叫,免除get
,set
。
lateinit var sum: String object UserPicCache{ const val KEY_CACHE = "CACHE" }
有些時候,我們只是想讓其生成其中的一個set或者get方法,這個時候就可以使用上述註解。
data class TestKotlinBean( @set:JvmName("setMessage") var message: String, @get:JvmName("getTitle") val title: String )
Java中呼叫:
TestKotlinBean testKotlinBean = new TestKotlinBean("", ""); testKotlinBean.setMessage("message"); testKotlinBean.getTitle();
當我們在Java中呼叫 Kotlin 伴生物件的方法或者變數時,必須通過 類名.Companion.xx 的方式才可以呼叫。這時候,我們就可以增加
@JvmStatic 來直接呼叫。
class Log { companion object { var time: String = "" fun toLog() { } } }
在Java中呼叫:
ToLog.toLog(); ToLog.getTime();
不過需要注意的是,@JvmStatic
對效能沒有任何提升,因為相應的,編譯器又生成了一個靜態方法,對於可變變數,會生成兩個靜態方法set,get。
在Kotlin中,對於方法引數,我們可能會加入一些預設值,便於更好的使用,但是在Java中,如果呼叫時不傳遞相應的方法引數,就會提示報錯,這種使用就可以使用@JvmOverloads
修飾方法。
object DialogUtils { @JvmStatic @JvmOverloads fun showPromptDialog(title: String = "提示") { } }
DialogUtils.showPromptDialog(); DialogUtils.showPromptDialog("標題");
到此這篇關於Java與Kotlin互調原理的文章就介紹到這了,更多相關Java與Kotlin互調內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45