Tag: java 10

为什么我们不能将两个推断变量分配为彼此的匿名类?

Java 10允许使用var这样的anonymous class : var a1 = new Object(){}; var a2 = new Object(){}; 但是这个赋值会抛出一个错误: a1 = a2; jshell> a1 = a2; | Error: | incompatible types: $1 cannot be converted to $1 | a1 = a2; | ^^ 基于错误日志,为什么Java 10不能将两个推断的var作为anonymous class分配给彼此,但它可以对其他类型(如Long , String等)执行相同的操作。

Java 10上的Swing问题

我目前正在尝试将我们的应用程序从Java 8迁移到Java 10,并且在几个月内将转向Java 11。 我们有一个遗留系统,它使用了一些API,我猜这些API会被移除或删除。 我们使用ant脚本(1.10.1)进行应用程序编译。 以下是构建我们的应用程序的部分: 在编译期间,我收到的几个与Java Swing相关的错误(再次比较旧的,但必须忍受它)转移到Java 10.我仍然没有完全意识到Java 10中发生的所有更改,对我来说它看起来喜欢这个问题与模块化概念有关。 虽然还在学习,但不确定。 我知道你的建议,知道这些错误是否与模块化有关。 还有任何建议或提示来解决这些问题? 以下是错误: [javac] Compiling 3253 source files to C:\WorkSpace\JAVA10\oswm\rel20.10_Patches\WorkManager\classes [javac] C:\WorkSpace\JAVA10\oswm\rel20.10_Patches\WorkManager\src\com\osm\datamgmt\report\ui\AssignPosNumberToolbar.java:26: error: package com.sun.java.swing.plaf.windows is not visible [javac] import com.sun.java.swing.plaf.windows.WindowsButtonUI; [javac] ^ [javac] (package com.sun.java.swing.plaf.windows is declared in module java.desktop, which does not export it) [javac] C:\WorkSpace\JAVA10\oswm\rel20.10_Patches\WorkManager\src\com\osm\datamgmt\report\ui\AssignPosNumberToolbar.java:27: error: package com.sun.java.swing.plaf.windows is not […]

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

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类的实现? 请注意,我没有直接使用此类,它由框架使用

在JShell上执行时同一语句的不同行为

我正在研究一个问题,以便在彼此之间存储两个类的引用 例如: class A { B b; A(B b){ this.b = b;} } class B { A a; B(A a){ this.a = a;} } public static void main(String…s){ A a = new A(new B(null)); aba = a; } 现在,如果我使用以下语句而不是上面的初始化: A a = new A(new B(a)); 我得到了以下错误,这很明显: Main.java:19: error: variable a might not have been initialised […]

在Java 9+中使用JRE运行时,我可以提供运行时编译器访问吗?

我正在将应用程序迁移到Java 10.我们的应用程序通常使用JRE运行,但我们允许用户通过捆绑tools.jar并使用reflection按需加载JavacTool实例来编译自己的自定义代码。 我们的方法如下: public static JavaCompiler getJavaCompiler() { String toolJarName = “tools.jar”; File file = getResourceForClass(“tools.jar”); try { file = file.getCanonicalFile(); } catch (IOException ignore) { } if (!file.exists()) throw new RuntimeException(“Can’t find java tools file: ‘”+file+”‘”); try { URL[] urls = new URL[]{ file.toURI().toURL() }; URLClassLoader cl = URLClassLoader.newInstance(urls); return Class.forName(“com.sun.tools.javac.api.JavacTool”, false, cl).asSubclass(JavaCompiler.class).newInstance(); } […]

IntelliJ IDEA没有Java 10’var’的代码完成?

最近我安装了IntelliJ IDEA的新版本(2018.1),它增加了对Java 10的支持。 但是当我尝试使用var (用于局部变量类型推断)时,我发现代码完成列表中没有var 。 (见下面的截图) 如果我继续输入,它将应用VarHandle作为该列表中的第一个建议。 然后我必须撤消完成以恢复var 。 我检查了项目设置,我使用JDK 10,语言级别也设置为10.代码如var number = 1; 汇编得很好。 我在IDE设置中找不到任何相关内容。 我究竟做错了什么? 我只想不间断地使用var声明。

Java 10’var’和inheritance

在查看varfunction之后,如下所示: 我在使用JDK 10设置Eclipse / IntelliJ IDEA IDE时遇到了困难,因此向具有可用Java 10环境的Stack Overflow用户寻求帮助。 考虑以下: public class A { public void someMethod() { … } } public class B extends A{ @Override public void someMethod() { … } } … … … var myA = new A(); // Works as expected myA = new B(); // Expected to fail in […]

目标org.apache.maven.plugins执行attach-javadocs:maven-javadoc-plugin:3.0.0:jar使用Java10失败

在链接升级到Java 10之后,将Javadoc注释中的链接断开到JDK包并尝试重现相同的内容,同时我可以将构建配置设置为: org.apache.maven.plugins maven-compiler-plugin 3.7.0 9 9 org.ow2.asm asm 6.1 org.apache.maven.plugins maven-javadoc-plugin 3.0.0 -html5 true true true public true attach-javadocs jar 注 – 在执行mvn clean verify -X这与Java-9一起成功运行。 另一方面,如果我将源和目标更改为10(Java-10),则构建将失败,并出现由NullPointerException引起的PluginExecutionException以及以下堆栈跟踪: Execution attach-javadocs of goal org.apache.maven.plugins:maven-javadoc-plugin:3.0.0:jar failed. at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:213) at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:154) at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:146) at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117) at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81) at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56) at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128) […]

Java 10中“受限关键字”和“保留类型名称”之间的概念差异是什么?

Java 10附带了新的局部变量类型推断。 令牌var可用于减少声明变量时所需的样板。 例如 var s = “hello”; 根据什么类型的令牌在Java 10中完全是“var”? 这个新令牌不是“关键字”,而是“保留类型名称”。 因此,单词“var”仍然可以用作变量名,它保持与现有代码的向后兼容性。 var var = “you can do this”; 当在Java 9中引入“模块”function时,这个新令牌的类型(以及其他9个相关令牌)被称为“受限制的关键字”。 也就是说,在某些特定于上下文的限制下,它们仅被视为关键字。 例如,您仍然可以使用称为模块的变量。 当新的语言function以不会破坏现有用户定义符号的方式添加到C ++时,它们被称为“上下文相关关键字”。 Java 10中新的“保留类型名称” var标记与“上下文相关关键字”或“受限制关键字”之间是否存在概念差异。 也就是说,在某些特定于上下文的限制下,新的var令牌实际上只是一个关键字。 如果是这种情况,为什么不将它简单地添加到“受限制的关键字”列表中? 为了进一步增加我的混淆, JLS的当前草案版本说: 字符序列var通常被视为标识符,但在某些特殊情况下,就好像它是关键字一样。 这个定义听起来像是一个“受限制的关键字”。

正确修复Java 10抱怨jaxb-impl 2.3.0的非法reflection访问?

我们正在考虑将一些遗留代码升级到Java 10.由于JAXB默认不可见(编辑:正确的长期解决方案不是使用各种JVM标志来规避症状,而是正确修复它)我已将此片段添加到我的pom.xml: javax.xml.bind jaxb-api 2.3.0 com.sun.xml.bind jaxb-core 2.3.0 com.sun.xml.bind jaxb-impl 2.3.0 不幸的是,在stderr启动时仍然会出现警告。 显然这不是正确的解决方案。 WARNING: An illegal reflective access operation has occurred WARNING: Illegal reflective access by com.sun.xml.bind.v2.runtime.reflect.opt.Injector (file:/home/tra/.m2/repository/com/sun/xml/bind/jaxb-impl/2.3.0/jaxb-impl-2.3.0.jar) to method java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int) WARNING: Please consider reporting this to the maintainers of com.sun.xml.bind.v2.runtime.reflect.opt.Injector WARNING: Use –illegal-access=warn to enable warnings of further illegal reflective access operations WARNING: All […]