标签: java-10

如何在Eclipse Oxygen中设置java 10?

我不确定最新版本的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)工作的,但是当我尝试运行应用程序时它仍然失败.

java eclipse java-10

16
推荐指数
1
解决办法
2万
查看次数

Java var 和推理类型歧义

两个调用都是正确的:

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)

java type-inference java-10

16
推荐指数
1
解决办法
312
查看次数

泛型类型变量中的局部类型推断和逆变

我来自以下代码:

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>的类型实际上是,所以推断的类型varTreeSet<? super T>. …

java generics type-inference contravariance java-10

15
推荐指数
1
解决办法
455
查看次数

为什么Oracle JDK 9下载这么早就结束了?

我想在我的机器上安装JDK 9,访问JDK官方下载页面,很惊讶地看到,

Java SE 9已经到了支持终点.Java SE 9的用户应切换到Java SE 10.请访问我们的Java SE下载页面以获取当前版本的Java SE.您将在......秒内重定向到Java SE下载页面.请将书签更新到Java SE下载页面.

我做了一些谷歌搜索和Java发布历史等.但找不到任何具体的原因.

我有几个问题 -

  1. Oracle仍在支持JDK 1.8,但是停止向JDK 9发布更新,为什么?
  2. 我应该继续使用JDK 1.8一段时间,然后直接切换到JDK 10吗?

java java-8 java-9 java-10

15
推荐指数
1
解决办法
3888
查看次数

如何使用java 10的Application Class-Data Sharing功能?

我在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或是否有一些限制?

java jvm java-10

15
推荐指数
2
解决办法
2167
查看次数

WeekField在JVM 8和JVM 10上的不同行为

我这里有一个非常简单的程序:

 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)

java jvm java-8 java-10 localdate

15
推荐指数
2
解决办法
276
查看次数

无法识别的VM选项'UseParNewGC',错误:无法创建Java虚拟机

我正在尝试使用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)

jvm jvm-crash java-10

14
推荐指数
3
解决办法
2万
查看次数

修补或覆盖核心Java 10类的实现

JFX中存在一个错误,通常在计算屏幕坐标时显示出来 https://bugs.openjdk.java.net/browse/JDK-8194727https://bugs.openjdk.java.net/browse/JDK-8190400

我已将问题跟踪到GeneralTransform3D的实现,这是javajfx运行时的一部分.

我已经向Oracle提交了一个错误报告,但在它被接受,修复并进入发布之前,我需要一种修复我的应用程序的方法.

在java 8中,我能够创建一个包含该类的固定版本的jar并将其安装在lib/ext文件夹中.这似乎有效,JFX实现使用了我自己的impl.

在java 10中,已删除扩展机制.将补丁jar添加到类路径不起作用,因为在类加载过程中为时已晚.

有没有办法在Java 10中覆盖/修补核心java类的实现?

请注意,我没有直接使用此类,它由框架使用

java classloader java-10

14
推荐指数
1
解决办法
407
查看次数

Java 10中的Java 10迁移8.在生产中运行服务

我们希望将所有生产服务从Java 8迁移到Java 10.据我所知,我们可能会面临构建(gradle等),依赖等问题以进行开发.但是当它只是JVM本身,即运行服务时,如果我们只是在生产中安装JVM 10来运行我们的jar服务,我们是否会遇到任何问题?

java jvm java-8 java-10

14
推荐指数
2
解决办法
1121
查看次数

迁移Jersey项目以在jersey.repackaged.org.objectweb.asm.ClassReader中使用Java 10.结果java.lang.IllegalArgumentException.<init>

以前的项目是在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)

jersey jersey-2.0 java-10 tomcat9

14
推荐指数
1
解决办法
3718
查看次数