问题标签 [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.
java - 当我尝试使用 var 评估表达式时,Intellij 18.1 中的错误
我有这个代码:
当我正常运行时,这工作得很好,但是当我运行调试并评估表达式时:
我收到消息“不支持方法参考评估”。
当我使用显式推理类型运行相同的代码时,评估工作正常。
这是一个错误还是存在一些配置?
java - 泛型类型变量中的局部类型推断和逆变
我遇到了以下代码:
此代码仅使用中间体TreeSet
来删除重复项,其中元素之间的相等性是根据提供的比较器定义的。
让我们给本地类型推断一个机会,我(天真地)认为......所以我将上面的代码更改为:
这对我来说是有道理的,因为set
可以从 的类型推断出 的类型comparator
,或者我是这么认为的。但是,修改后的代码无法编译并生成以下错误:
现在,我明白了为什么会发生错误,并且我承认比较器的类型实际上是Comparator<? super T>
,所以推断的类型var
是TreeSet<? super T>
。
但是,我想知道为什么var
不能将泛型类型推断为TreeSet
asT
而不是? 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
的类型推断为。不过,我想知道为什么我必须明确指定。set
TreeSet<T>
T
编辑 2:在另一条评论中,用户 @Holger 巧妙地提到该语言禁止以下内容:
上面的代码编译失败,出现以下错误:
所以现在问题变得更加明显:如果我不能? super T
在实例化表达式中明确指定有界泛型类型new TreeSet<? super T>(comparator)
,为什么编译器会推断TreeSet<? super T>
为set
局部变量的类型?
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 的情况下工作。
这是错误消息
任何人都知道我应该怎么做才能安装火花?
java - Java 10 中的 var 是什么,可以和 JavaScript 媲美?
我在阅读 Java 10 中发布的新功能时发现:
Java 10
var
作为保留类型名称引入以减少冗长。它可以用作变量、方法和包名称,但我们不能将其用作类或接口名称。
是否var
类似于var
JavaScript 中的关键字?var
Java和 JavaScript之间到底有什么相同点和不同点var
?
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
java - 更改为 ThreadPriorityPolicy 范围
我有一个遗留应用程序,它在 Java 8 JVM 中启动,参数如下:
我正在尝试在 Java 10 JVM 中运行相同的应用程序。但是,这会在启动时遇到错误:
这可能是由于 JVM 实现的变化转移到了 HotSpot JVM 的更高版本。我发现了一些关于 Cassandra 和这个问题的问题,但是我找不到任何文档/问题跟踪来记录 JVM 中的这个变化。有什么地方我可以读到这个吗?
可能出于正当理由将此参数添加到遗留应用程序中。在 Java 10 中我应该如何最好地处理这个问题?将值设置为1
? 省略论证?
java - JDK 9+ BuiltinClassLoader ModuleReference 解析将使用类路径(不是 Jar)来查找资源
我遇到了 JPMS jdk.internal.loader 的障碍。在我的 IDE 上下文中执行主要方法时的 BuiltinClassLoader(我使用 IntelliJ 2018.1) 。
如果使用标准方法将资源加载到模块类中,例如
找不到资源,因为ModuleReference不是 jar,而是类路径,例如
nameToModule映射中的所有其他条目如下所示:
当然,资源永远不会在类中找到,但如果该位置是 jar 根目录,则可能是这样。
这是一个错误还是我错过了什么?
java - Maven 未与 Java 10 一起运行:Files\Java\jdk-10""=="" 在此时出乎意料
我正在尝试将我的应用程序升级到 Java 10,因此,我安装了 JDK 并设置了 JAVA_HOME:
但无论我尝试使用 Maven 做什么,我都会收到相同的错误:
这个错误是什么意思?这是怎么回事?我如何解决它?
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。