问题标签 [java-10]

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.

0 投票
0 回答
546 浏览

java - 当我尝试使用 var 评估表达式时,Intellij 18.1 中的错误

我有这个代码:

当我正常运行时,这工作得很好,但是当我运行调试并评估表达式时:

我收到消息“不支持方法参考评估”。

当我使用显式推理类型运行相同的代码时,评估工作正常。

这是一个错误还是存在一些配置?

0 投票
2 回答
503 浏览

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

我遇到了以下代码:

此代码仅使用中间体TreeSet来删除重复项,其中元素之间的相等性是根据提供的比较器定义的。

让我们给本地类型推断一个机会,我(天真地)认为......所以我将上面的代码更改为:

这对我来说是有道理的,因为set可以从 的类型推断出 的类型comparator,或者我是这么认为的。但是,修改后的代码无法编译并生成以下错误:

现在,我明白了为什么会发生错误,并且我承认比较器的类型实际上是Comparator<? super T>,所以推断的类型varTreeSet<? super T>

但是,我想知道为什么var不能将泛型类型推断为TreeSetasT而不是? super T. 毕竟,根据文档, aTreeSet<E>有一个接受 type 参数的构造函数Comparator<? super E>。所以调用这个构造函数应该创建一个TreeSet<E>,而不是一个TreeSet<? super E>。(这是第一个片段显示的内容)。我希望var遵循同样的逻辑。

注意 1:使代码编译的一种方法是将返回类型更改为Set<? super T>. 但是,那将是一个几乎无法使用的集合...

注 2:另一种方法是不在比较器中使用逆变,但我不希望这样做,因为我无法使用Comparator比较T.

注意 3:我知道第一个片段有效,所以很明显我应该坚持不使用var并将集合明确声明为Set<T>. 但是,我的问题不是我是否应该丢弃我的第二个片段或如何修复它。相反,我想知道为什么不在我的第二个片段中var推断TreeSet<T>为局部变量的类型。set


编辑1:此评论中,用户@nullpointer 正确指出我应该进行以下细微更改以编译第二个片段:

现在泛型类型参数T对于 是显式的TreeSet,因此可以正确地将局部变量var的类型推断为。不过,我想知道为什么我必须明确指定。setTreeSet<T>T


编辑 2:另一条评论中,用户 @Holger 巧妙地提到该语言禁止以下内容:

上面的代码编译失败,出现以下错误:

所以现在问题变得更加明显:如果我不能? super T在实例化表达式中明确指定有界泛型类型new TreeSet<? super T>(comparator),为什么编译器会推断TreeSet<? super T>set局部变量的类型?

0 投票
1 回答
6846 浏览

java - 线程主 java.lang.exceptionininitializerError 中的异常在没有 hadoop 的情况下安装 spark

我正在尝试安装 spark2.3.0,更具体地说,它是 spark-2.3.0-bin-hadoppo2.7

'D:\spark\bin' 已添加到环境变量 PATH 中。同时安装了JDK-10。未安装 Hadoop。但谷歌表示 spark 可以在没有 hadoop 的情况下工作。

这是错误消息

任何人都知道我应该怎么做才能安装火花?

0 投票
3 回答
3606 浏览

java - Java 10 中的 var 是什么,可以和 JavaScript 媲美?

我在阅读 Java 10 中发布的新功能时发现:

Java 10var作为保留类型名称引入以减少冗长。它可以用作变量、方法和包名称,但我们不能将其用作类或接口名称。

是否var类似于varJavaScript 中的关键字?varJava和 JavaScript之间到底有什么相同点和不同点var

0 投票
1 回答
5545 浏览

java - Android Studio:无法使用可执行文件 C:\Program Files\Java\jdk-10\bin\java.exe 确定 Java 版本

我想在我的 Android Studio 中使用我的 JDK 10。我去了文件>项目结构并指定了我的JDK位置:

单击“确定”后,它向我显示Gradle sync failed了一条错误消息:

我已将 JAVA_HOME 变量设置为我的 jdk 和 jre 文件夹,并将路径变量设置为C:\ProgramData\Oracle\Java\javapath但问题仍然存在。

我还可以使用以下命令找到 Java 版本:
"C:\Program Files\Java\jdk-10\bin\java.exe" -version 这给了我正确的版本:

截屏:

在此处输入图像描述

版本:

操作系统:Windows 10 64 位
Android Studio 版本:3.1.0.16
JDK 版本:10

0 投票
1 回答
801 浏览

java - 更改为 ThreadPriorityPolicy 范围

我有一个遗留应用程序,它在 Java 8 JVM 中启动,参数如下:

我正在尝试在 Java 10 JVM 中运行相同的应用程序。但是,这会在启动时遇到错误:

这可能是由于 JVM 实现的变化转移到了 HotSpot JVM 的更高版本。我发现了一些关于 Cassandra 和这个问题的问题,但是我找不到任何文档/问题跟踪来记录 JVM 中的这个变化。有什么地方我可以读到这个吗?

可能出于正当理由将此参数添加到遗留应用程序中。在 Java 10 中我应该如何最好地处理这个问题?将值设置为1? 省略论证?

0 投票
1 回答
351 浏览

java - JDK 9+ BuiltinClassLoader ModuleReference 解析将使用类路径(不是 Jar)来查找资源

我遇到了 JPMS jdk.internal.loader 的障碍。在我的 IDE 上下文中执行主要方法时的 BuiltinClassLoader(我使用 IntelliJ 2018.1)

如果使用标准方法将资源加载到模块类中,例如

找不到资源,因为ModuleReference不是 jar,而是类路径,例如

nameToModule映射中的所有其他条目如下所示:

当然,资源永远不会在类中找到,但如果该位置是 jar 根目录,则可能是这样。

这是一个错误还是我错过了什么?

0 投票
2 回答
1870 浏览

java - Maven 未与 Java 10 一起运行:Files\Java\jdk-10""=="" 在此时出乎意料

我正在尝试将我的应用程序升级到 Java 10,因此,我安装了 JDK 并设置了 JAVA_HOME:

但无论我尝试使用 Maven 做什么,我都会收到相同的错误:

这个错误是什么意思?这是怎么回事?我如何解决它?

0 投票
3 回答
3305 浏览

java - getResourceAsStream 在 Java 10 中返回 null

我有一个使用 Java 1.8.0 162 的应用程序,我正在将其升级到 Java 10。我遇到的问题之一是

开始在 Java 10 中返回 null。任何想法为什么?appProperties定义如下:

这发生在静态方法中,以防万一。

该文件存在于src/main/resources/application.properties. 无论我是从 IntelliJ 还是从 Maven 生成的 jar 运行,都会发生这种情况。

我尝试添加:

对我pom.xml来说,但这没有效果。

使用以下命令打印类路径:

产生,作为第一个条目:

其中包含 application.properties。

0 投票
2 回答
2709 浏览

java - IntelliJ IDEA 没有 Java 10 'var' 的代码完成?

最近我安装了 IntelliJ IDEA 的新版本(2018.1),增加了对 Java 10 的支持。

但是当我尝试使用var(用于局部变量类型推断)时,我发现var代码完成列表中没有。(见下面的截图)

如果我继续输入,它将VarHandle作为该列表中的第一个建议应用。然后我必须撤消该完成以恢复var.

我检查了项目设置,我使用 JDK 10,语言级别也设置为 10。类似的代码var number = 1;编译得很好。而且我在 IDE 设置中找不到任何关于此的内容。

我究竟做错了什么?我只想var不间断地使用声明。

代码完成