[英]Java cannot access Kotlin's Companion
我正在嘗試在 java 代碼中使用 kotlinx 序列化。 我遇到的問題是我無法在 java 代碼中使用 Companion 對象來訪問它的靜態 serializer() 方法,該方法由 kotlin serializaton 插件生成。 這是 decalres 可序列化類的 kotlin 代碼:
@kotlinx.serialization.Serializable
data class MyData(private val data: String)
我的 mavem pom.xml 文件如下所示
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>TestProject</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>18</maven.compiler.source>
<maven.compiler.target>18</maven.compiler.target>
<kotlin.version>1.7.0</kotlin.version>
<serialization.version>1.3.3</serialization.version>
</properties>
<dependencies>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-stdlib-jdk8</artifactId>
<version>${kotlin.version}</version>
</dependency>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-test</artifactId>
<version>${kotlin.version}</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.jetbrains.kotlinx/kotlinx-serialization-protobuf-jvm -->
<dependency>
<groupId>org.jetbrains.kotlinx</groupId>
<artifactId>kotlinx-serialization-json-jvm</artifactId>
<version>1.3.3</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-maven-plugin</artifactId>
<version>${kotlin.version}</version>
<executions>
<execution>
<id>compile</id>
<phase>compile</phase>
<goals>
<goal>compile</goal>
</goals>
</execution>
<execution>
<id>test-compile</id>
<phase>test-compile</phase>
<goals>
<goal>test-compile</goal>
</goals>
</execution>
</executions>
<configuration>
<jvmTarget>1.8</jvmTarget>
<compilerPlugins>
<plugin>kotlinx-serialization</plugin>
</compilerPlugins>
</configuration>
<dependencies>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-maven-serialization</artifactId>
<version>${kotlin.version}</version>
</dependency>
</dependencies>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>17</source>
<target>17</target>
</configuration>
</plugin>
</plugins>
</build>
我寫的java代碼如下(它沒有編譯,因為它找不到Companion對象):
public class Main {
public static void main(String[] args) {
MyData.Companion.serializer();
}
}
我可以訪問其他 kotlin 類的 Companion 對象(例如,JsonElement 的 Companio.serializer()),但無法訪問由 kotlinx 序列化插件自動生成的 Companion。 此外,自動生成的目標類包含 Companion 對象,代碼如下:
// IntelliJ API Decompiler stub source generated from a class file
// Implementation of methods is not available
@kotlinx.serialization.Serializable public final data class MyData public constructor(data: kotlin.String) {
public companion object {
}
@kotlin.Deprecated public constructor(seen1: kotlin.Int, data: kotlin.String?, serializationConstructorMarker: kotlinx.serialization.internal.SerializationConstructorMarker?) { /* compiled code */ }
private final val data: kotlin.String /* compiled code */
private final operator fun component1(): kotlin.String { /* compiled code */ }
@kotlin.Deprecated public object `$serializer` : kotlinx.serialization.internal.GeneratedSerializer<MyData> {
}
}
UPD:我可以訪問我嘗試過的自動生成的復制方法。
這似乎只是 IntelliJ IDEA 中 Kotlin 編譯器插件的問題。 即使 IDEA 認為您的 Java 代碼有錯誤,您實際上仍然可以在命令行上編譯它(或使用 Maven 或 Gradle)並且它運行得很好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.