Questions tagged «java-9»

使用此标记可解决特定于Java 9的问题,Java 9是Java平台的版本9,于2017年9月21日发布。在大多数情况下,您还应指定java标记。


1
为什么array [idx ++] + =“ a”在Java 8中增加一次idx,而在Java 9和10中增加两次?
为了挑战,一位高尔夫球手代码 编写了以下代码: import java.util.*; public class Main { public static void main(String[] args) { int size = 3; String[] array = new String[size]; Arrays.fill(array, ""); for(int i = 0; i <= 100; ) { array[i++%size] += i + " "; } for(String element: array) { System.out.println(element); } } } 在Java …
751 java  java-8  javac  java-9  java-10 

1
使用Java EE API替换不推荐使用的JPMS模块
Java 9 已弃用了六个包含Java EE API的模块,它们将很快被删除: 带有javax.activation包的java.activation java.corba有javax.activity,javax.rmi,javax.rmi.CORBA,和org.omg.*包 带javax.transaction包的java.transaction java.xml.bind与所有javax.xml.bind.*软件包 java.xml.ws有javax.jws,javax.jws.soap,javax.xml.soap,和所有javax.xml.ws.*包 带javax.annotation包的java.xml.ws.annotation 哪些维护的第三方工件提供了这些API?它们提供这些API的性能如何或它们必须提供哪些其他功能都没关系-重要的是,它们是这些模块/软件包的直接替代品吗? 为了更轻松地收集知识,我用到目前为止的知识进行了回答,并将答案设置为社区Wiki。我希望人们能扩展它而不是自己写答案。 在您投票关闭之前: 是的,各个模块上已经存在一些问题,对此问题的答案当然会重复该信息。但是AFAIK并没有一点可以了解所有这些知识,我认为这具有很大的价值。 要求图书馆推荐的问题通常被认为是题外话,因为“它们往往会吸引有目的的答案和垃圾邮件”,但我认为这并不适用。有效库的集合已明确标出:它们必须实现特定的标准。除此之外,没有其他问题,因此我认为意见和垃圾邮件风险不大。

23
无法安装android-sdk:“ java.lang.NoClassDefFoundError:javax / xml / bind / annotation / XmlSchema”
安装android sdk工具时,会发出以下错误: java.lang.NoClassDefFoundError:javax / xml / bind / annotation / XmlSchema 为什么会发生这种情况,如何解决? 调试输出: $ java --version java 9 Java(TM) SE Runtime Environment (build 9+181) Java HotSpot(TM) 64-Bit Server VM (build 9+181, mixed mode) $ brew cask install android-sdk ==> Caveats We will install android-sdk-tools, platform-tools, and build-tools for you. You …
166 java  android  java-9 

6
Java中的可选orElse可选
我一直在使用Java 8中的新Optional类型,并且遇到了似乎不受功能支持的常见操作:“ orElseOptional” 考虑以下模式: Optional<Result> resultFromServiceA = serviceA(args); if (resultFromServiceA.isPresent) return result; else { Optional<Result> resultFromServiceB = serviceB(args); if (resultFromServiceB.isPresent) return resultFromServiceB; else return serviceC(args); } 这种模式有多种形式,但是归结为希望在一个可选函数上使用一个“ orElse”,该函数需要一个函数来生成一个新的可选变量,只有当当前的不存在该函数时才调用它。 它的实现如下所示: public Optional<T> orElse(Supplier<Optional<? extends T>> otherSupplier) { return value != null ? this : other.get(); } 我很好奇是否有这种方法不存在的原因,是否以一种意想不到的方式使用Optional,以及人们想出了什么其他方式来处理这种情况。 我应该说,我认为涉及定制实用程序类/方法的解决方案并不优雅,因为使用我的代码的人不一定知道它们的存在。 另外,如果有人知道,这种方法是否会包含在JDK 9中,我可以在哪里提出这种方法?对我来说,这似乎是对API的明显忽略。
137 java  lambda  java-8  optional  java-9 


4
什么是非法的反射访问
关于Java 9中的非法反射访问,存在很多问题。 现在我找不到,因为所有Google都涌现出来,是人们试图解决错误消息,实际上是非法的反射访问。 所以我的问题很简单: 什么定义了非法的反射访问,什么情况触发了警告? 我已经了解到,它与Java 9中引入的封装原理有关,但是在我找不到解释的情况下,它们如何结合在一起以及触发该警告的原因是什么。
126 java  java-9  java-module 

4
List.of和Arrays.asList有什么区别?
Java 9为列表引入了新的工厂方法List.of: List<String> strings = List.of("first", "second"); 上一个选项和新选项之间有什么区别?也就是说,这之间有什么区别: Arrays.asList(1, 2, 3); 还有这个: List.of(1, 2, 3);
117 java  list  java-9 

3
Java 9中如何实现字符串连接?
如JEP 280:Indify String Concatenation: 更改由String生成的静态-concatenation字节码序列,javac以使用invokedynamic对JDK库函数的调用。这将使将来的String连接优化成为可能,而无需进一步更改所发出的字节码javac。 在这里,我想了解invokedynamic调用的用途是什么,字节码的连接与有何不同invokedynamic?

30
Eclipse没有发现由NoClassDefFoundError为LauncherFactory使用JUnit 5进行的测试
问题 每当我运行项目JUnit测试(将JUnit 5与Java 9和Eclipse Oxygen 1.a结合使用)时,都会遇到Eclipse无法找到任何测试的问题。 说明 在运行配置下,eclipse甚至找不到用@Test注释的方法,而是只显示“ (所有方法) ”。下图希望可以更好地了解我的设置: 控制台输出: java.lang.NoClassDefFoundError: org/junit/platform/launcher/core/LauncherFactory at org.eclipse.jdt.internal.junit5.runner.JUnit5TestLoader.<init>(JUnit5TestLoader.java:31) at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) at java.base/java.lang.reflect.Constructor.newInstance(Unknown Source) at java.base/java.lang.Class.newInstance(Unknown Source) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.createRawTestLoader(RemoteTestRunner.java:368) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.createLoader(RemoteTestRunner.java:363) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.defaultInit(RemoteTestRunner.java:307) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.init(RemoteTestRunner.java:222) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:206) Caused by: java.lang.ClassNotFoundException: org.junit.platform.launcher.core.LauncherFactory at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(Unknown Source) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(Unknown Source) …
99 java  eclipse  junit  java-9  junit5 

23
无法使用Java 9运行sdkmanager --list
我下载并安装了: JDK(jdk-9.0.1_osx-x64_bin.dmg从Oracle)在这里 Android的SDK( sdk-tools-darwin-3859397.zip)从谷歌在这里。 配置完PATH变量后,我尝试运行sdkmanager,它替换了android用于管理SDK组件的命令。但是,它失败,如下所示: $ sdkmanager --list Exception in thread "main" java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlSchema at com.android.repository.api.SchemaModule$SchemaModuleVersion.<init>(SchemaModule.java:156) at com.android.repository.api.SchemaModule.<init>(SchemaModule.java:75) at com.android.sdklib.repository.AndroidSdkHandler.<clinit>(AndroidSdkHandler.java:81) at com.android.sdklib.tool.SdkManagerCli.main(SdkManagerCli.java:117) at com.android.sdklib.tool.SdkManagerCli.main(SdkManagerCli.java:93) Caused by: java.lang.ClassNotFoundException: javax.xml.bind.annotation.XmlSchema at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:582) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:185) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:496) ... 5 more 这是Java版本: $ java -version java version "9.0.1" Java(TM) SE Runtime Environment (build 9.0.1+11) …

2
Java 9编译器中的--release标志是什么?
Java 9javac具有一个新标志--release: > javac --help ... --release <release> Compile for a specific VM version. Supported targets: 6, 7, 8, 9 与-source和-target标志有何不同?这只是它的捷径-source X -target X吗?
85 java  javac  java-9 

5
为什么要设计拼图/ JPMS?
Java的程序包管理系统对我而言似乎总是简单而有效的。JDK本身大量使用它。我们一直在使用它来模仿名称空间和模块的概念。 什么是Jigsaw项目(又名Java平台模块系统)试图填补? 从官方网站: 该项目的目标是为Java SE平台设计和实现标准模块系统,并将该系统应用于平台本身和JDK。

2
为什么\ R在Java 8和Java 9之间的正则表达式中表现不同?
以下代码在Java 8和9中都可以编译,但是行为不同。 class Simple { static String sample = "\nEn un lugar\r\nde la Mancha\nde cuyo nombre\r\nno quiero acordarme"; public static void main(String args[]){ String[] chunks = sample.split("\\R\\R"); for (String chunk: chunks) { System.out.println("Chunk : "+chunk); } } } 当我使用Java 8运行它时,它返回: Chunk : En un lugar de la Mancha de cuyo …
78 java  regex  unicode  java-8  java-9 

8
为什么Map.of不允许空键和值?
在Java 9,新的工厂方法已经出台了List,Set和Map接口。这些方法允许快速实例化一行中包含值的Map对象。现在,如果我们考虑: Map<Integer, String> map1 = new HashMap<Integer, String>(Map.of(1, "value1", 2, "value2", 3, "value3")); map1.put(4, null); 如果我们这样做,则上面的内容毫无例外地被允许: Map<Integer, String> map2 = Map.of(1, "value1", 2, "value2", 3, "value3", 4, null ); 它抛出: Exception in thread "main" java.lang.NullPointerException at java.base/java.util.Objects.requireNonNull(Objects.java:221) .. 我无法获得,为什么在第二种情况下不允许null。 我知道HashMap可以将null作为键和值,但是在Map.of的情况下为什么要限制它呢? java.util.Set.of("v1", "v2", null)和的情况相同java.util.List.of("v1", "v2", null)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.