microstream是否已经支持JDK 15?记录有问题



我正在使用JDK 15.0.1并尝试保存一条记录。我在微流代码中出错。语句if (declaringClass.isRecord())中的异常是用文本引发的。无法获取记录上的字段偏移量(预览(:

在文档中,声明自JDK14以来支持记录(请参阅https://manual.docs.microstream.one/data-store/faq/java-features#can-微流句柄记录(。

if (f == null) {
throw new NullPointerException();
}
Class<?> declaringClass = f.getDeclaringClass();
if (declaringClass.isHidden()) {
throw new UnsupportedOperationException("can't get field offset on a hidden class: " + f);
}
if (declaringClass.isRecord()) {
throw new UnsupportedOperationException("can't get field offset on a record (preview): " + f);
}
return theInternalUnsafe.objectFieldOffset(f);
}

我使用以下版本的微流

implementation 'one.microstream:storage.embedded:04.00.00-MS-GA'

我做错什么了吗?

真诚的

感谢您对microstream的兴趣。不幸的是,我无法从问题的描述中找到问题所在。描述中的代码来自jdk类Unsafe.java。由于我还不能重现您的问题,我很快在github中做了一个小测试项目,其中Records的基本测试是Java。https://github.com/johny2000uwb/microstream-records

public record PersonRecord(String firstName, String lastName) {
}
@Test
public void saveRecordTest() {
PersonRecord personRecord = new PersonRecord("Maria", "Lukasova");
EmbeddedStorageManager storage = EmbeddedStorage.start(personRecord, location);
storage.shutdown();
PersonRecord secondRecord = new PersonRecord("Kamila", "Pazourkova");
storage = EmbeddedStorage.start(secondRecord, location);
Assertions.assertEquals("Maria", secondRecord.firstName());
}

记录仍然只是预览功能,所以有必要启用它

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<release>14</release> <!-- <release>13/14/15</release> -->
<compilerArgs>--enable-preview</compilerArgs>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.2</version>
<configuration>
<argLine>--enable-preview</argLine>
</configuration>
</plugin>
</plugins>
</build>

较新版本的微带有一个记录的变通方法(例如版本6(

由于Java 15中引入的记录的反射限制,必须将导出添加到VM参数中:

--添加导出java.base/jdk.internal.misc=ALL_UNNAMED

另请参阅微带线常见问题

最新更新