我不确定最新版本的eclipse即Oxygen是否支持java 10.我从我的mac机器上的首选项配置了Java 10的JRE.
另外,我尝试将maven编译器插件添加到我的pom.xml中: -
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>10</source>
<target>10</target>
<compilerVersion>10</compilerVersion>
<fork>true</fork>
<executable>/Library/Java/JavaVirtualMachines/jdk-10.jdk/Contents/Home</executable>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
设置运行配置后我也尝试了如下: -
有人知道我怎么能让它适用于java-10.
我尝试运行以下代码: -
public class App {
public static void main(String[] args) {
var list = new ArrayList<String>();
System.out.println("Hello World!");
}
}
Run Code Online (Sandbox Code Playgroud)
更新: -我在评论中应用了建议的补丁,但仍然失败.
截图如下: -
另外,我按照这篇文章进行编译.所以,编译实际上是从eclipse(maven install
)工作的,但是当我尝试运行应用程序时它仍然失败.
两个调用都是正确的:
Collectors.groupingBy((String s)->s.toLowerCase(),Collectors.counting());
Collectors.groupingBy((String s)->s.toLowerCase(Locale.ENGLISH),Collectors.counting());
Run Code Online (Sandbox Code Playgroud)
从那以后,为什么下面一个是错误的:
Collectors.groupingBy(String::toLowerCase,Collectors.counting());
Run Code Online (Sandbox Code Playgroud)
毕竟String::toLowerCase
不能对应第二个……那为什么IntelliJ会Reference to 'toLowerCase' is ambiguous, both 'toLowerCase(Locale)' and 'toLowerCase()' match
说呢?
String::toLowerCase
必须明确解决(String s)->s.toLowerCase()
还是我错过了什么?
当然,如果我为 IntelliJ 添加更多上下文,例如:
Collector<String,?,Map<String,Long>> c = Collectors.groupingBy(String::toLowerCase,Collectors.counting());
Run Code Online (Sandbox Code Playgroud)
这是正确的,但是在 Java 10 var 推理类型上下文中这是错误的:
var c = Collectors.groupingBy(String::toLowerCase,Collectors.counting());
Run Code Online (Sandbox Code Playgroud)
我知道编译器无法推断counting
. 如果我写:
Collector<String,?,Long> counter = Collectors.counting();
var c = Collectors.groupingBy(String::toLowerCase,counter);
Run Code Online (Sandbox Code Playgroud)
它是正确的。因此,为什么编译器不能推断出唯一可接受的形式?
- - - -编辑 - - - -
我交替使用 IntelliJ/编译器只是因为我首先使用 IntelliJ 并且报告的错误是:
Reference to 'toLowerCase' is ambiguous, both 'toLowerCase(Locale)' and 'toLowerCase()' match
Run Code Online (Sandbox Code Playgroud)
编译器的错误更难以理解(但包含更多关于推理失败原因的提示),例如:
Demo.java:31: error: …
Run Code Online (Sandbox Code Playgroud) 我来自以下代码:
public static <T> Set<T> distinct(
Collection<? extends T> list,
Comparator<? super T> comparator) {
Set<T> set = new TreeSet<>(comparator);
set.addAll(list);
return set;
}
Run Code Online (Sandbox Code Playgroud)
此代码仅使用中间项TreeSet
来删除重复项,其中元素之间的相等性按照提供的比较器进行定义.
让我们给本地类型推理一个机会,我(天真地)想...所以我将上面的代码更改为:
public static <T> Set<T> distinct(
Collection<? extends T> list,
Comparator<? super T> comparator) {
var set = new TreeSet<>(comparator);
set.addAll(list);
return set;
}
Run Code Online (Sandbox Code Playgroud)
这对我来说很有意义,因为set
可以从类型中推断出类型comparator
,或者我认为.但是,修改后的代码不会编译并生成以下错误:
java: incompatible types: java.util.TreeSet<capture#1 of ? super T> cannot be converted to java.util.Set<T>
Run Code Online (Sandbox Code Playgroud)
现在,我理解为什么会出现错误,并且我承认比较器Comparator<? super T>
的类型实际上是,所以推断的类型var
是TreeSet<? super T>
. …
我想在我的机器上安装JDK 9,访问JDK官方下载页面,很惊讶地看到,
Java SE 9已经到了支持终点.Java SE 9的用户应切换到Java SE 10.请访问我们的Java SE下载页面以获取当前版本的Java SE.您将在......秒内重定向到Java SE下载页面.请将书签更新到Java SE下载页面.
我做了一些谷歌搜索和Java发布历史等.但找不到任何具体的原因.
我有几个问题 -
我在Oracle doc https://docs.oracle.com/javase/8/docs/technotes/guides/vm/class-data-sharing.html上阅读了关于CDS的内容.
我理解的是加载jvm所需的系统类文件被解析,验证,然后存储在jre/lib/[arch] /client/classes.jsa的存档中.此外,它们还为jvm提供了内存映射,因此jvm根据归档中给出的映射信息直接映射内存.因此,每次jvm实例启动时,这都会减少类加载的开销.如果错了请纠正我.
现在来到java 10,我如何为我的应用程序代码实现这一目标?其次,完整的应用程序代码是否有资格获得CDS或是否有一些限制?
我这里有一个非常简单的程序:
public static void main(String[] args) {
LocalDate year = LocalDate.ofYearDay(2022, 100);
System.out.println(year);
System.out.println(WeekFields.of(Locale.GERMAN).weekOfYear());
System.out.println(year.with(WeekFields.of(Locale.GERMAN).weekOfYear(), 0));
System.out.println(year.with(WeekFields.of(Locale.GERMAN).weekOfYear(), 0).with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY)));
}
Run Code Online (Sandbox Code Playgroud)
但是它在JVM 8和JVM 10上的行为有所不同。问题似乎出在的实现上WeekFields.of(Locale.GERMAN).weekOfYear()
。
在JVM 10上,我得到以下结果:
JVM 10
2022-04-10
WeekOfYear[WeekFields[SUNDAY,1]]
2021-12-19
2021-12-13
Run Code Online (Sandbox Code Playgroud)
而在JVM 8上:
JVM 8
2022-04-10
WeekOfYear[WeekFields[MONDAY,4]]
2022-01-02
2021-12-27
Run Code Online (Sandbox Code Playgroud)
为什么会这样呢?我是否正在做某事,可能会导致不确定的行为?还是在某处指定了这种行为变化?
JVM10:
$ java -version
openjdk version "10.0.2" 2018-07-17
OpenJDK Runtime Environment (build 10.0.2+13-Ubuntu-1ubuntu0.18.04.4)
OpenJDK 64-Bit Server VM (build 10.0.2+13-Ubuntu-1ubuntu0.18.04.4, mixed mode)
Run Code Online (Sandbox Code Playgroud)
JVM8
$ java -version
openjdk version "1.8.0_191"
OpenJDK Runtime Environment (build 1.8.0_191-8u191-b12-2ubuntu0.18.04.1-b12)
OpenJDK 64-Bit Server VM (build 25.191-b12, …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用jre 10.0.1 64位启动服务器.Windows启动批处理文件中的JVM设置有明显变化.通过设置-XX:+UseParNewGC
作为错误的参考点,为了使JVM服务器从java 10开始,而不是我已经显示的java 8设置,需要将其更改为什么?
导致错误引用的代码行是:
set JAVA_PARAMETERS=-XX:+UseParNewGC -XX:+CMSIncrementalPacing -XX:+CMSClassUnloadingEnabled -XX:ParallelGCThreads=2 -XX:MinHeapFreeRatio=5 -XX:MaxHeapFreeRatio=10
Run Code Online (Sandbox Code Playgroud) JFX中存在一个错误,通常在计算屏幕坐标时显示出来 https://bugs.openjdk.java.net/browse/JDK-8194727和 https://bugs.openjdk.java.net/browse/JDK-8190400
我已将问题跟踪到GeneralTransform3D的实现,这是javajfx运行时的一部分.
我已经向Oracle提交了一个错误报告,但在它被接受,修复并进入发布之前,我需要一种修复我的应用程序的方法.
在java 8中,我能够创建一个包含该类的固定版本的jar并将其安装在lib/ext文件夹中.这似乎有效,JFX实现使用了我自己的impl.
在java 10中,已删除扩展机制.将补丁jar添加到类路径不起作用,因为在类加载过程中为时已晚.
有没有办法在Java 10中覆盖/修补核心java类的实现?
请注意,我没有直接使用此类,它由框架使用
我们希望将所有生产服务从Java 8迁移到Java 10.据我所知,我们可能会面临构建(gradle等),依赖等问题以进行开发.但是当它只是JVM本身,即运行服务时,如果我们只是在生产中安装JVM 10来运行我们的jar服务,我们是否会遇到任何问题?
以前的项目是在Tomcat 8和JDK 8上工作正常但是当我在Tomcat 9和JDK 10上迁移我的项目时,它给出了如下错误:
Oct 05, 2018 11:02:01 AM org.apache.catalina.core.ApplicationContext log
SEVERE: StandardWrapper.Throwable
java.lang.IllegalArgumentException
at jersey.repackaged.org.objectweb.asm.ClassReader.<init>(ClassReader.java:170)
at jersey.repackaged.org.objectweb.asm.ClassReader.<init>(ClassReader.java:153)
at jersey.repackaged.org.objectweb.asm.ClassReader.<init>(ClassReader.java:424)
at org.glassfish.jersey.server.internal.scanning.AnnotationAcceptingListener.process(AnnotationAcceptingListener.java:170)
at org.glassfish.jersey.server.ResourceConfig.scanClasses(ResourceConfig.java:915)
at org.glassfish.jersey.server.ResourceConfig._getClasses(ResourceConfig.java:869)
at org.glassfish.jersey.server.ResourceConfig.getClasses(ResourceConfig.java:775)
at org.glassfish.jersey.server.ResourceConfig$RuntimeConfig.<init>(ResourceConfig.java:1206)
at org.glassfish.jersey.server.ResourceConfig$RuntimeConfig.<init>(ResourceConfig.java:1178)
at org.glassfish.jersey.server.ResourceConfig.createRuntimeConfig(ResourceConfig.java:1174)
at org.glassfish.jersey.server.ApplicationHandler.<init>(ApplicationHandler.java:345)
at org.glassfish.jersey.servlet.WebComponent.<init>(WebComponent.java:392)
at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:177)
at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:369)
at javax.servlet.GenericServlet.init(GenericServlet.java:158)
at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1124)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1079)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:971)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4829)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5143)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1429)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1419)
at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
at java.base/java.util.concurrent.AbstractExecutorService.submit(Unknown Source)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:944)
at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:839)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1429)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1419)
at …
Run Code Online (Sandbox Code Playgroud)