LoginSignup
1
1

More than 3 years have passed since last update.

Mavenで導入したKotlinのInterfaceに実装した関数を、Java8からデフォルト実装として利用する方法

Posted at

概要

KotlinのI/Fにはデフォルト実装を定義できますが、Java側からそのデフォルト実装を利用するにはあらかじめ設定が必要です。
今回はその設定方法を書き記します。

前提

  • Maven
  • Kotlin 1.35
  • Java 1.8

設定方法

①Kotlinのプラグインの設定

pom.xmlのkotlinをcompileさせることを定義している箇所の引数に、-Xjvm-default=compatibility を追加
例:

pom.xml
<plugin>
    <groupId>org.jetbrains.kotlin</groupId>
    <artifactId>kotlin-maven-plugin</artifactId>
    <version>${kotlin.version}</version>
    <executions>
        <execution>
            <id>compile</id>
            <goals> <goal>compile</goal> </goals>
            <configuration>
                <sourceDirs>
                    <sourceDir>${project.basedir}/src/main/kotlin</sourceDir>
                    <sourceDir>${project.basedir}/src/main/java</sourceDir>
                </sourceDirs>
                <args>
                    <arg>-Xjvm-default=compatibility</arg>
                </args>
            </configuration>
        </execution>
        <execution>
            <id>test-compile</id>
            <goals> <goal>test-compile</goal> </goals>
            <configuration>
                <sourceDirs>
                    <sourceDir>${project.basedir}/src/test/kotlin</sourceDir>
                    <sourceDir>${project.basedir}/src/test/java</sourceDir>
                </sourceDirs>
                <args>
                    <arg>-Xjvm-default=compatibility</arg>
                </args>
            </configuration>
        </execution>
    </executions>
</plugin>

propertiesにjvmTargetを記載
例:

pom.xml
<properties>
    <jdk.version>1.8</jdk.version>
    <encoding>UTF-8</encoding>
    <kotlin.version>1.3.60</kotlin.version>
    <kotlin.compiler.jvmTarget>1.8</kotlin.compiler.jvmTarget>
</properties>

②Javaにデフォルト実装として認識させたいメソッドに @JvmDefault アノテーションを付与

以上となります。

1
1
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
1
1