当我使用 JDK 17 运行此测试时出现此错误:
java.lang.reflect.InaccessibleObjectException: Unable to make field final transient java.lang.Class java.util.EnumSet.elementType accessible: module java.base does not "opens java.util" to unnamed module @60addb54
Run Code Online (Sandbox Code Playgroud)
@Test
public void testThatDeepCopyCopiesEmptySet() {
SetOfEnumUserType setOfEnumUserType = createSetOfEnumUserType();
EnumSet<PaymentMethodType> src = EnumSet.noneOf(PaymentMethodType.class);
EnumSet<?> dest = (EnumSet<?>) setOfEnumUserType.deepCopy(src);
assertThat(dest, (is(src)));
assertThat(dest, not(isSameInstanceAs(src)));
Class<?> srcType = (Class<?>) ReflectionTestUtils.getField(src, "elementType");
Class<?> destType = (Class<?>) ReflectionTestUtils.getField(dest, "elementType");
assertThat(srcType, (is(destType)));
}
Run Code Online (Sandbox Code Playgroud)
我尝试根据其他答案将其添加到我的 pom.xml 中:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
<compilerArgs>
<arg>--add-opens java.base/java.lang=ALL-UNNAMED</arg>
<arg>--add-opens java.base/java.util=ALL-UNNAMED</arg>
</compilerArgs>
</configuration>
</plugin> …Run Code Online (Sandbox Code Playgroud) 尝试将我的项目从 Java 11 更新到 Java 17,并在特定测试中从 Mockito 收到意外错误。
mock(java.util.Random.class);
Run Code Online (Sandbox Code Playgroud)
投掷
Feb 04, 2022 3:07:01 PM com.google.inject.internal.MessageProcessor visit
INFO: An exception was caught and reported. Message: java.lang.IllegalAccessException: class
net.bytebuddy.description.annotation.AnnotationDescription$ForLoadedAnnotation cannot access interface
jdk.internal.util.random.RandomSupport$RandomGeneratorProperties (in module java.base)
because module java.base does not export jdk.internal.util.random to unnamed module @2f54a33d
org.mockito.exceptions.base.MockitoException:
Mockito cannot mock this class: class java.util.Random.
Mockito can only mock non-private & non-final classes.
If you're not sure why you're getting this error, please report to the mailing list.
Java : 17 …Run Code Online (Sandbox Code Playgroud) 我有一个与 Java 17 新的 Vector API 功能中的 pow() 函数相关的问题。我正在尝试以矢量化方式实现布莱克斯科尔斯公式,但我很难获得与标量实现相同的性能
\n代码如下:
\n以下是一些代码片段:
\n public static double[] createArray(int arrayLength)\n {\n double[] array0 = new double[arrayLength];\n for(int i=0;i<arrayLength;i++)\n {\n array0[i] = 2.0;\n }\n return array0;\n } \nRun Code Online (Sandbox Code Playgroud)\n @Param({"256000"})\n int arraySize;\n public static final VectorSpecies<Double> SPECIES = DoubleVector.SPECIES_PREFERRED;\n DoubleVector vectorTwo = DoubleVector.broadcast(SPECIES,2);\n DoubleVector vectorHundred = DoubleVector.broadcast(SPECIES,100);\n\n double[] scalarTwo = new double[]{2,2,2,2};\n double[] scalarHundred = new double[]{100,100,100,100};\n\n @Setup\n public void …Run Code Online (Sandbox Code Playgroud) TL,博士;是否有本地 Java17 解决方案来生成自签名证书,无论是通过标准库(不太可能)还是通过一些轻量级库?
还有一个类似的问题(我问过Access `sun.security.x509` in JDK 11 without module?),因为从 JDK11 开始,对内部 JDK 包的访问受到限制,因此无法使用sun.security.x509. 直到 JDK17 为止,都可以通过某些编译器配置来标记打开这些包来规避它。JDK17 改变了这一点,删除了该选项。
从我能够收集到的当前解决方案是:
keytooljava工具,但这有两个缺点:调用外部工具速度较慢,并且需要创建密钥库文件。目前(2)在我的用例中似乎更方便,但我很想找到第三个选项 - 本机、轻量级解决方案。
编辑:有 OpenJDK 问题:JDK-8058778:用于创建证书和证书请求的新 API,我希望有一天它会被实现......
有一个clojure.core/bean将 POJO 转换为 Map 的标准函数:
class MyPojo{
public String getFirst(){ return "abc"; }
public int getSecond(){ return 15; }
}
IFn bean = Clojure.var("clojure.core", "bean")
var result = bean.invoke(new MyPojo())
// result => {:first = abc, :second = 15}
Run Code Online (Sandbox Code Playgroud)
对于 Java 17 记录类,此函数不起作用,因为记录不遵循 POJO"get***"属性约定。
Clojure 是否以同样的方式支持 Java 17 记录实例?
Java 8 中引入的类型Optional<T>主要推荐用于返回类型和结果。因此,每当我在类字段或方法参数中使用它时,我都会在 IntelliJ 中收到警告:
Optional<?>用作字段/参数的类型。
Optional<T>但是,当我在规范构造函数中使用 an 作为记录参数时,我没有收到此警告:
public record AuthenticationResult(
boolean isAuthenticated,
Optional<User> user,
Optional<String> authorizationHeader)
{ }
Run Code Online (Sandbox Code Playgroud)
不使用类型作为参数/字段的做法是否Optional<T>不适用于记录参数,因为字段将始终作为记录自动生成的 getter 方法的返回值进行访问?
或者是因为记录是一项新功能,并且此警告尚未实现,并且在记录中使用可选参数与用作方法参数或字段时具有相同的后果?
我正在将 Spring Boot 应用程序从 JDK 8 迁移到 JDK 17。
但在 JDK 17 中出现以下错误:
java.lang.reflect.InaccessibleObjectException: Unable to make protected final java.lang.Class java.lang.ClassLoader.findLoadedClass(java.lang.String) accessible: module java.base does not "opens java.lang" to unnamed module @1356d4d4
at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:354) ~[na:na]
at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:297) ~[na:na]
at java.base/java.lang.reflect.Method.checkCanSetAccessible(Method.java:199) ~[na:na]
at java.base/java.lang.reflect.Method.setAccessible(Method.java:193) ~[na:na]
at org.springframework.util.ReflectionUtils.makeAccessible(ReflectionUtils.java:577) ~[spring-core-5.3.20.jar:5.3.20]
at org.springframework.context.support.ContextTypeMatchClassLoader$ContextOverridingClassLoader.isEligibleForOverriding(ContextTypeMatchClassLoader.java:99) ~[spring-context-5.3.20.jar:5.3.20]
at org.springframework.core.OverridingClassLoader.loadClass(OverridingClassLoader.java:87) ~[spring-core-5.3.20.jar:5.3.20]
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520) ~[na:na]
at org.springframework.core.OverridingClassLoader.loadClass(OverridingClassLoader.java:82) ~[spring-core-5.3.20.jar:5.3.20]
at org.springframework.context.support.ContextTypeMatchClassLoader.loadClass(ContextTypeMatchClassLoader.java:70) ~[spring-context-5.3.20.jar:5.3.20]
at org.springframework.beans.factory.support.AbstractBeanFactory.doResolveBeanClass(AbstractBeanFactory.java:1594) ~[spring-beans-5.3.20.jar:5.3.20]
at org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1534) ~[spring-beans-5.3.20.jar:5.3.20]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.determineTargetType(AbstractAutowireCapableBeanFactory.java:704) ~[spring-beans-5.3.20.jar:5.3.20]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.predictBeanType(AbstractAutowireCapableBeanFactory.java:674) ~[spring-beans-5.3.20.jar:5.3.20]
at org.springframework.beans.factory.support.AbstractBeanFactory.isFactoryBean(AbstractBeanFactory.java:1670) ~[spring-beans-5.3.20.jar:5.3.20]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doGetBeanNamesForType(DefaultListableBeanFactory.java:570) ~[spring-beans-5.3.20.jar:5.3.20] …Run Code Online (Sandbox Code Playgroud) 我当然希望这能得到支持:
\nprivate static void regex() {\n String plain = "\\\\w+";\n String withTextBlocks = """\n \\w+\n """;\n}\nRun Code Online (Sandbox Code Playgroud)\n但withTextBlocks不能在 Java-17 下编译。\xe2\x80\x99 是不是我们不应该转义的文本块点?我已经通过了JEP,也许解释就在那里,但我无法理解它。第二个问题,如果有人知道的话,未来是否有一个 JEP?谢谢。
当我想发布我的应用程序时出现此错误:com.android.tools.r8.internal.jb: Sealed classes are not supported as program classes when generating class files
在 build.gradle 中,由于 android studio min gradle,我无法编辑编译版本。
compileOptions {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
kotlinOptions {
jvmTarget = "17"
}
Run Code Online (Sandbox Code Playgroud)
我在模块中使用的密封类是
compileOptions {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
kotlinOptions {
jvmTarget = "17"
}
Run Code Online (Sandbox Code Playgroud) 您能否帮助我们解答有关 ECS 中 Docker 容器中运行的 Java 8 Spring boot 应用程序的疑问?迁移到 Java 17 后,我们观察到与在 Java 8 上运行的容器的内存使用量相比,容器的内存使用量显着增加了 1GB(我们使用docker stats两个容器的命令比较了内存)。我们只有 Java 进程在容器内运行。jmap下面提供了 Java 8 和 Java 17 的命令输出。我们观察到的唯一重大变化是:
MaxNewSizeJava 17 中的 1228.0MB。我们想知道这是否是 Docker 容器中内存使用量增加的原因。我们了解到,新的 G1 垃圾收集算法的内存使用量略高(从命令输出中发现,大约 120 MB,而 CMS 的内存使用量为 12 MB jcmd VM.native_memory),但我们没想到会出现如此剧烈的增加。关于这个问题的任何建议或见解将不胜感激。
Java 8 的 jmap 输出
using parallel threads in the new generation.
using thread-local object allocation. …Run Code Online (Sandbox Code Playgroud) java-17 ×10
java ×7
android ×1
android-r8 ×1
certificate ×1
clojure ×1
escaping ×1
g1gc ×1
heap-memory ×1
java-8 ×1
java-platform-module-system ×1
java-record ×1
kotlin ×1
maven ×1
mockito ×1
openjdk-17 ×1
option-type ×1
performance ×1
record ×1
regex ×1
sealed-class ×1
simd ×1
spring ×1
spring-boot ×1