我试图在java代码中使用kotlinx序列化。我遇到的问题是,我不能在java代码中使用Companion对象来访问由kotlin序列化插件生成的静态序列化器()方法。下面是标记可序列化类的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对象(例如,Companio.serializer() of JsonElement),但不能访问由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:我可以访问我尝试过的自动生成的复制方法。
UPD:这是intellij的截图

发布于 2022-06-22 13:37:20
这似乎只是IntelliJ的Kotlin编译器插件的一个问题。尽管IDEA认为您的Java代码中有错误,但实际上仍然可以在命令行上编译它(或者使用Maven或Gradle),并且运行得很好。
https://stackoverflow.com/questions/72712369
复制相似问题