问题标签 [java-16]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 如何将@ConfigurationProperties 与记录一起使用?
Java 16 引入了Records,这有助于在编写携带不可变数据的类时减少样板代码。当我尝试@ConfigurationProperties
按如下方式使用 Record 作为 bean 时,我收到以下错误消息:
我如何将记录用作@ConfigurationProperties
?
java - 为什么 Java Records 有访问器方法而不是公共的 final 字段?
记录类自动获取许多标准成员:
- 对于header中的每个组件,有两个成员:一个与组件同名和返回类型的公共访问器方法,以及一个与组件同类型的私有final字段;
如果生成的最终字段与访问器方法具有相同的名称,为什么不生成公共最终字段呢?
由于记录类的实例可以序列化和反序列化,因此记录组件几乎不会被仔细更改。但是,无法通过提供 writeObject、readObject、readObjectNoData、writeExternal 或 readExternal 方法来自定义流程
所以改变 API 内部实现(记录组件)不是一个合适的理由。但我从@Brian Goetz那里得到了充分的理由
谢谢大家关注我的傻问题
java - 同一个 .java 文件中的多条记录
我们总是可以在一个 .java 文件中包含多个类。考虑到封装和每个类都包含多行代码,在 1 个 .java 文件中包含 1 个类(不要谈论嵌套类)总是有意义的。
现在记录开始发挥作用,它们可以少至 1 行代码。将多条记录封装在同一个 .java 类中是否有意义?
例如我们可以有
DTO.java文件将包含
如果没有记录具有公共访问修饰符,那么我们可以将它们全部包含在一个名为DTO.java的文件中
在我看来,拥有 3 个 .java 文件,每个文件中只有 1 行代码似乎不是很好。
但是,我们仍然会遇到类似这里描述的问题,同一个 java 文件中的多个类
java - Gradle Ktlint 插件在 Java 16 上失败
升级到 Java 16 后,我无法使 ktlint gradle 插件工作。它在扔
我知道这是由更严格的模块检查(JEP 396)引起的,但我无法为插件设置 JVM 参数。我试过了:
- 设置环境变量
JAVA_OPTS=--illegal-access=warn
- 设置
org.gradle.jvmargs=--illegal-access=warn -Dkotlin.daemon.jvm.options=--illegal-access=warn
_gradle.properties
但是这两种尝试都没有帮助,我没有想法。
java - 使用 Java 16 时 Tomcat 未找到 Spring 初始化程序类
我有一个非常简单的 Gradle ( 7.0-rc-1
) 脚本来使用嵌入式 Tomcat 实例初始化单个 Spring 5“hello world”端点。原始代码取自我在互联网上找到的一个随机示例。我的示例 Gradle 项目可以在这里找到。
我不确定它是如何工作的,但是 Web 服务器以某种方式知道WebApplicationInitializer.onStartup(ServletContext)
在启动时调用该方法,以便初始化 Spring。
这在 Java 8 上可以正常工作;但是当我将 Gradle 构建定义中的以下工具链规范更改为 Java 16 时失败。
使用 Java 8 时,Spring 已正确初始化并且端点可以正常工作。
使用 Java 16 时,onStartup()
不会调用该方法,因此 Spring 没有初始化并且端点不起作用(尽管 Tomcat 仍然启动并响应错误)。
日志显示一条消息,但没有堆栈跟踪:
我需要做什么才能在 Java 16 上进行这项工作?
注意我不想用spring-boot,请不要推荐。
android - 无法启动新的 React Native 项目。卡了一段时间请帮助(无法编译设置文件settings.gradle)
我的 SSD 坏了,所以我不得不重新开始。现在我被困在设置中。我非常仔细地按照 React 本地环境设置一步一步进行操作,在此之前我安装了 Java 16。现在,当我尝试启动新项目时,我初始化了这就是我得到的:
java - 为什么 Stream#toList 的默认实现看起来过于复杂/次优?
查看 的实现Stream#toList
,我只是注意到它看起来是多么的过于复杂和次优。
就像上面的 javadoc 中提到的那样default
,大多数实现都没有使用这个Stream
实现,但是,在我看来,它可能不是这样。
来源
我的想法会更好
甚至
IntelliJ 的提议
在 JDK 源代码中实现有什么好的理由吗?
java - java.lang.ExceptionInInitializerError 与 Java-16 | jlClassFormatError 可访问:模块 java.base 不会“打开 java.lang”到未命名的模块
我cglib
在 Maven 项目中具有传递依赖项。尽管添加了我认为正确的内容,但--add-opens
我无法让该库与 Java 16 一起使用。
如何cglib
使用 Java 16?我在 github 页面上提出了这个问题。
最小的可重现示例:
Main.java
使用 Java 15:
javac -cp cglib-3.3.0.jar Main.java
java --add-opens java.base/java.lang=ALL-UNNAMED -cp cglib-3.3.0.jar:asm-7.1.jar:. Main
使用 Java 16:
javac -cp cglib-3.3.0.jar Main.java
java --add-opens java.base/java.lang=ALL-UNNAMED -cp cglib-3.3.0.jar:asm-7.1.jar:. Main
java - 如何使用 Java 记录断言 hasProperty?
我在测试中有一段代码使用 Hamcrest 2.2 检查结果列表是否包含某些属性:
NameDto
这在正常上课时效果很好。但是在我将其更改为 a 之后Record
,HamcresthasProperty
抱怨没有名为的属性name
:
我可以使用其他匹配器来实现与以前相同的匹配吗?或者我可以使用其他一些解决方法来让它与记录一起使用?