JVM中运行的各种语言底层互通,先天上就具备混合编程的优势。Java在JVM中的老大地位不可撼动,所以诸如Groovy,Kotlin,Scala,Clojure等都可以无痛调用。
在Groovy中调用Java
在groovy, kotlin, scala
中调用java
库,甚至连导入的关键字都是一样的,都是import
,如在Groovy中示例如下
C:\Users\Laser>groovysh
九月 12, 2019 6:28:42 下午 java.util.prefs.WindowsPreferences <init>
Type ':help' or ':h' for help.
groovy:000> import java.util.*
===> java.util.*
groovy:000> rand = new Random()
===> java.util.Random@34997338
groovy:000> rand.nextInt(100)
===> 9
groovy:000> rand.nextInt(100)
===> 36
groovy:000>
在Kotlin中调用java
在kotlin中调用java的方法如下
C:\Users\Laser>kotlin
Welcome to Kotlin version 1.3.50 (JRE 1.8.0_144-b01)
Type :help for help, :quit for quit
>>> import java.util.*
>>> var rand = Random()
var rand = Random()>>> rand.nextInt(100)
rand.nextInt(100)res5: kotlin.Int = 90
在scala中调用java
C:\Users\Laser>scala
Welcome to Scala 2.13.0 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_144).
Type in expressions for evaluation. Or try :help.
scala> import java.util
scala> val rand = new util.Random()
rand: java.util.Random = java.util.Random@530ee28b
scala> rand.nextInt(100)
res0: Int = 59
在clojure中调用java
Clojure这个Lisp方言有点特立独行,毕竟不是面向对象语言,本身就与java水土不服,但也可以调用文章来源:https://www.toymoban.com/news/detail-617189.html
C:\Users\Laser>lein repl
user=> (def randn (java.util.Random.))
#'user/randn
user=> (.nextInt randn 100)
88
user=>
对于其他java中方法的调用,也需要改成Clojure形式,列入下表,注意Clojure中的.
和空格。文章来源地址https://www.toymoban.com/news/detail-617189.html
操作 | Java | Clojure |
---|---|---|
创建类的实例 | ClassName obj = new ClassName(args) | (def obj (ClassName. args) |
调用实例方法 | obj.methodName(args) | (.methodName obj args) |
调用静态方法 | ClassName.methodName(args) | (ClassName/methodName args) |
访问静态属性 | ClassName.field | ClassName/field |
访问实例的属性 | obj.field | (.field obj) |
修改实例的属性 | obj.field = value | (set! (.field obj) value) |
引用Class | ClassName.class | ClassName |
到了这里,关于在其他jdk语言中调用java的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!