🐕
KotlinからJavaのコードを呼ぶ!
Tips💡
KotlinからJavaのコードを呼ぶことができるらしい?
本当だろうか?
ついつい気になって試してみた。といってもログを出すだけですが笑
Javaで実装したfunctionのコード
functionjavaっていうファイルを作成して、コードを書きます。Log.dと書くと、Javaのコードで、ログを出せるようです。
package com.example.fromjavarun.functionjava;
import android.util.Log;
public class Greeting {
public String greet(String name) {
// log hello message
Log.d("Greeting", "Hello, " + name);
Log.d("FromJava", "KotlinからJavaのコードを呼ぶ!!!");
return "Hello, " + name + "!";
}
}
Kotlinのコード
MainActivity.ktで、Javaのコードを呼び出して、KotlinからJavaのコードを読んで実行します。Javaクラスをインスタンス化して、functionを呼び出してボタンを押すと、実行することができます。
package com.example.fromjavarun
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.material3.Button
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview
import com.example.fromjavarun.ui.theme.FromJavaRunTheme
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
FromJavaRunTheme {
// A surface container using the 'background' color from the theme
Surface(
modifier = Modifier.fillMaxSize(),
color = MaterialTheme.colorScheme.background
) {
Greeting("Android")
}
}
}
}
}
@Composable
fun Greeting(name: String, modifier: Modifier = Modifier) {
// JavaのGreetingクラスをインスタンス化
val greetingJava = com.example.fromjavarun.functionjava.Greeting()
Column(modifier = modifier) {
Text(text = "Hello $name!")
// Buttonを追加
Button(onClick = {
// greetメソッドを呼び出し
greetingJava.greet("make app")
}) {
Text("Click me")
}
}
}
@Preview(showBackground = true)
@Composable
fun GreetingPreview() {
FromJavaRunTheme {
Greeting("Android")
}
}
確認するときは、LogCat
というところから確認します。 アプリをビルドして、エミュレーターに表示されているボタンを押すと、ログが表示されます。
最後に
最近、Android開発の経験があるエンジニアさんとお話して、Javaのコードをコピペして、Kotlinに変換して、使うことができることを教えてもらいました。本当にできるみたいですね。凄いな!
for文を使ってループ処理をすれば10回ログを出すロジックも作ってみました。引数を与えると、10回渡した引数の値が表示されると思います。
ループ処理するコード
package com.example.fromjavarun.functionjava;
import android.util.Log;
public class Greeting {
public String greet(String name) {
// for 1..10 greeting msg log
for (int i = 1; i <= 10; i++) {
Log.d("Greeting", "Hello " + name + "!");
}
return "Hello " + name + "!";
}
}
Kotlinのコードを修正して実行
@Composable
fun Greeting(name: String, modifier: Modifier = Modifier) {
// JavaのGreetingクラスをインスタンス化
val greetingJava = com.example.fromjavarun.functionjava.Greeting()
Column(modifier = modifier) {
Text(text = "Hello $name!")
// Buttonを追加
Button(onClick = {
// greetメソッドを呼び出し
greetingJava.greet("make app")
}) {
Text("Click me")
}
}
}
Discussion