LoginSignup
0
0

More than 3 years have passed since last update.

Kotlinでクラスを書いてJavaで呼んでみる

Posted at

去年Kotlinでコード書いたはずだ!とドキュメントを見てみるが、見覚えが無いなぁと思っていたら、去年書いたのはGoだった・・・乗り掛かった舟ということでKotlinを見てみました。

開発環境はIntelliJ

KotlinのチュートリアルのGetting Startedで「Getting Started with IntelliJ IDEA」とIntelliJが1番に出てくるので流行っているのかな?コミュニティ版をダウンロードしてインストールします。

IntelliJ.PNG

Kotlinファイル作成&実行

以前見たときよりダークなだけでカッコいい感じがするIntelliJ。
intellij2.png
新規にプロジェクトを作って、Kotlinファイルを追加して実行してみるまでは「Getting Started with IntelliJ IDEA」通りにサクサクできる。

fun main() {
    println("Hello Kotlin!")
}

IntelliJインストール時になんとなく、そうかなぁと思いましたがKotlinのファイル拡張子「.kt」なんですね。(初心者)

.ktファイルを編集しているコードの左にRunボタンがあるのでクリックすると実行できる。IntelliJとても便利。
kt_run.png

ファイル名がKotlinClassSono1.ktとなっていますが、Kotlinファイルってクラスファイルなのかと思ってました。

このmain関数をJavaからどうやって呼ぶのかな?ってことでJarファイルがいるだろうなぁ・・・IntelliJで「Build Project」を実行しても特に何も出力されないので調べてみました。

Jarファイルを出力

FileメニューからProject Structureを開きます。
project-structure.png
Project Settings>Artifacts で「+」ボタンをクリック JAR>From modules with dependencies
add-jar.png
Main Class は指定しないで「OK」ボタンをクリック
createjarfrommodule.png
「Include in project build」にチェックをします。
includeinprojectbuild.png
もう一度「Build Project」を実行してみると・・・
プロジェクトフォルダー下にJarファイルが出力されてます。ありがとうIntelliJ
outputdir.PNG
ちなみにプロジェクト名は「KotlinComponent」になっています。
Jarファイルの中を覗いてみると
jar1.PNG
「ファイル名+Kt」という名前の「KotilnClassSono1Kt.class」が含まれているのが確認できました。

Javaから呼んでみる

Javaのプロジェクトで作成したJarファイルを読み込んでみると、

public class Main {
    public static void main(String[] args) {
        KotlinClassSono1Kt.main();
    }
}

KotlinClassSono1Ktが見えて、
javaexec.PNG
JavaからKotlinのコードを実行できました。
クラス名にKtついてるし、なんだかなぁ~ということで、IntelliJに戻って追加でpackageとclassを追加してみました。
パッケージのsrcフォルダでコンテキスメニュー New>Package でパッケージ作成。普通です。
作成したPackageでコンテキストメニュー New>Kotlin File/Class !?
newclass.png
ここで初めてFileとClassの違いに気が付きました。

package ari

class KotlinClassSono2 {
}

Packageには「ari」を指定してます。
KotlinのClassのドキュメントを真似してクラスに関数「test」を持たせてみます。コンストラクタはおまけです。

package ari

class KotlinClassSono2 constructor(name: String){
    init {
        println("name = ${name}")
    }

    constructor(name: String, age: Int) : this("$name"){
        println("age = ${age}")
    }

    fun test() {
        println("test call OK !")
    }
}

再度「Build Project」を実行してJarファイルを作成してJavaで読み込みます。
「ari」パッケージの下に「KotlinClassSono2」クラスが見えました。
クラス名に「Kt」が付いていません。なるほど~
javacode.PNG
コンストラクタを使ってインスタンスも作れました。
関数呼び出しも成功です。
javaexec2.PNG

最後に

Kotlinいいですね。
使わないんですけどreferenceをもう少し読んでみようかなぁと思いました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0