首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >微流是否已经支持JDK 15 -记录问题?

微流是否已经支持JDK 15 -记录问题?
EN

Stack Overflow用户
提问于 2020-11-10 12:18:53
回答 2查看 362关注 0票数 1

我使用JDK 15.0.1并尝试保存记录。我在微流代码中有个错误。在if (declaringClass.isRecord())语句中抛出的异常文本无法在记录(预览):上获得字段偏移。

在文档中,说明自JDK 14以来就支持记录(请参阅https://manual.docs.microstream.one/data-store/faq/java-features#can-microstream-handle-records)。

代码语言:javascript
复制
        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);
    }

我使用以下版本的微流

代码语言:javascript
复制
implementation 'one.microstream:storage.embedded:04.00.00-MS-GA'

我做错什么了吗?

由衷地

EN

回答 2

Stack Overflow用户

发布于 2020-11-11 13:06:21

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

代码语言:javascript
复制
public record PersonRecord(String firstName, String lastName) {

}
代码语言:javascript
复制
    @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());

    }

记录仍然只是预览功能,因此有必要启用它。例如,在Maven中:

代码语言:javascript
复制
    <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>
票数 2
EN

Stack Overflow用户

发布于 2022-01-20 22:07:01

较新版本的微流有记录的解决办法(例如,版本6)

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

-java.base/jdk.内在.=ALL_UNNAMED

另见微流常见问题

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64768801

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档