我想要某種方法僅對kotlin代碼可見,而對Java代碼不可見。如何強制某些方法僅對kotlin可見
例如,這裏是一個方法fun method(){}
,只能在kotlin代碼中調用,不能在Java代碼中調用。
我想要某種方法僅對kotlin代碼可見,而對Java代碼不可見。如何強制某些方法僅對kotlin可見
例如,這裏是一個方法fun method(){}
,只能在kotlin代碼中調用,不能在Java代碼中調用。
您可以通過使用@JvmSynthetic
註釋正是你想要的實現。這標誌着與在JVM字節碼的synthetic
flag的元素,它的用法成爲Java源代碼的錯誤(不太清楚有關其他JVM語言,需要進行檢查,但可能它也能發揮作用):
@JvmSynthetic
fun f() { /*...*/ }
的標記的元素仍然可以在Kotlin中正常使用。
不幸的是,@JvmSynthetic
不能用於標記一個類(它沒有CLASS
目標)。
查看更多:
What's the intended use of @JvmSynthetic in Kotlin?(沒有答案,但效果在問題中所述)
Inline function cannot access non-public-API: @PublishedApi vs @Suppress vs @JvmSynthetic,關於如何可以用於隱藏有效公衆內部成員。
Kotlin stdlib中的某些方法用@kotlin.internal.InlineOnly
註釋標記爲inline
。這使編譯器將它們內聯到kotlin代碼中,而不會在JVM類中生成相應的方法。
這個技巧用於減少stdlib的方法數量。這是一個危險的解決方案,如果使用不正確,可能會導致單獨編譯時出現問題。
捕獲:@kotlin.internal.InlineOnly
註釋是內部的,只能在標準庫中使用。我知道沒有將其發佈到公共API中的計劃。
TL; DR:你能做到這一點,但只有當你正促使科特林STDLIB
非常感謝您的回答! – like