Tag: java 9

newInstance与新的jdk-9 / jdk-8和jmh

我在这里看到很multithreading比较并试图回答哪个更快: newInstance或new operator 。 看源代码,似乎newInstance应该慢得多 ,我的意思是它做了这么多的安全检查并使用reflection。 我决定先测量一下,首先运行jdk-8。 这里是使用jmh的代码。 @BenchmarkMode(value = { Mode.AverageTime, Mode.SingleShotTime }) @Warmup(iterations = 5, time = 2, timeUnit = TimeUnit.SECONDS) @Measurement(iterations = 5, time = 2, timeUnit = TimeUnit.SECONDS) @State(Scope.Benchmark) public class TestNewObject { public static void main(String[] args) throws RunnerException { Options opt = new OptionsBuilder().include(TestNewObject.class.getSimpleName()).build(); new Runner(opt).run(); } @Fork(1) @Benchmark […]

为什么Map.of不允许null键和值?

使用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)的情况下java.util.Set.of("v1", "v2", null)发生同样的情况。

List.of和Arrays.asList有什么区别?

Java 9引入了新的Collection Factory方法List.of : List<String> strings = List.of("first", "second"); 那么,以前的和新的select有什么区别呢? 那是什么区别呢: Arrays.asList(1, 2, 3); 和这个: List.of(1, 2, 3);

Java 9中压缩string和压缩string的区别

JDK9中压缩string的紧凑string的优点是什么?

Observer在Java 9中已被弃用。我们应该使用什么来代替它?

Java 9出来了, Observer已经被弃用了。 这是为什么? 这是否意味着我们不应该实施观察者模式了? 这将是很好的知道什么是一个更好的select?

为什么项目拼图/ JPMS?

Java的包pipe理系统对我来说总是显得简单而有效。 它被JDK本身大量使用。 我们一直在用它来模仿名称空间和模块的概念。 什么是项目拼图 (又名Java平台模块系统 )试图填写? 来自官方网站: 本项目的目标是为Java SE平台devise和实现标准模块系统,并将该系统应用于平台本身和JDK。

在Java 9中如何实现string连接?

正如JEP 280所写: 将由javac生成的静态String -concatenation字节码序列更改为对JDK库函数使用invokedynamic调用。 这将使未来优化String连接,而不需要进一步修改由javac提供的字节码。 在这里,我想了解invokedynamic调用的用法,以及字节码级联与invokedynamic不同之处是什么?

Java 8可选的orElse可选

我一直在使用Java 8中的新的可选types ,并且遇到了一个看起来像一个常见的操作,但是在function上不受支持:“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); } 这种模式有很多种forms,但是它归结为想要一个可选的“orElse”,它带有一个产生一个新的可选的函数,只有当前函数不存在时才被调用。 它的实现看起来像这样: public Optional<T> orElse(Supplier<Optional<? extends T>> otherSupplier) { return value != null ? this : other.get(); } 我很好奇,如果有这样的一个方法不存在的原因,如果我只是用一个意想不到的方式使用可选,以及人们提出了什么其他方式来处理这种情况。 我应该说,我认为涉及自定义实用程序类/方法的解决scheme并不优雅,因为使用我的代码的人不一定知道它们存在。 另外,如果有人知道,这个方法是否会包含在JDK 9中,我可以在哪里提出这样一个方法? 这似乎是API的一个非常明显的遗漏给我。

包与Java 9中的自动模块冲突

随着Java 9的接近水平,我认为这是一个很好的学习练习,将我的一些项目移植到Java 9.在我的一个项目中,我有依赖关系rxjava和rxjavafx dependencies { compile 'io.reactivex:rxjava:1.2.6' compile 'io.reactivex:rxjavafx:1.0.0' … } 我想创build这个项目作为命名模块。 为此,我需要创build一个module-info.java文件,我需要在这里指定rxjava和rxjavafx的需求。 但是,这些库还没有任何模块信息。 为了解决这个问题,我读过我需要创build自动模块 。 从我的理解,我需要重命名rxjava和rxjavafxjar子有一个简单的名称,然后列出在–module-path参数中的jar子。 然后我添加一个module-info.java指令在我的module-info.java与jar名称。 module com.foo.bar { requires rxjavafx; requires rxjava; } 我写了一个gradle任务来为我编辑jar子名称,而且在大多数情况下它似乎正在工作。 它需要将所有需要编译的jar包重命名为不包含版本信息或斜杠。 这些文件然后连接成一个:分隔的string: tasks.withType(JavaCompile) { delete { delete '/tmp/gradle' } copy { from configurations.compile + configurations.testCompile into '/tmp/gradle' rename '(.*)-[0-9]+\\..*.jar', '$1.jar' rename { String fileName -> fileName.replace("-", "") } […]

Maven是否准备好了JDK9?

今天我试了最新的jdk9 Build 113,并尝试用最新的Maven 3.3.9编译我的项目 这些命令(部分通过twitter发现) export MVN_OPTS="-Dmaven.compiler.fork -Dmaven.compiler.executable=/somewhere/Downloads/jdk-9/bin/javac" export JAVA_HOME="/somewhere/Downloads/jdk-9" mvn clean install 但是我得到这个错误 …总之: [WARNING] Error injecting: org.codehaus.plexus.archiver.jar.JarArchiver java.lang.ExceptionInInitializerError at sun.reflect.NativeConstructorAccessorImpl.newInstance0(java.base@9-ea/Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(java.base@9-ea/NativeConstructorAccessorImpl.java:62) … at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356) Caused by: java.lang.ArrayIndexOutOfBoundsException: 1 at org.codehaus.plexus.archiver.zip.AbstractZipArchiver.<clinit>(AbstractZipArchiver.java:116) … 89 more [WARNING] Error injecting: org.apache.maven.plugin.jar.JarMojo java.lang.ExceptionInInitializerError at sun.reflect.NativeConstructorAccessorImpl.newInstance0(java.base@9-ea/Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(java.base@9-ea/NativeConstructorAccessorImpl.java:62) … at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415) at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356) Caused by: java.lang.ArrayIndexOutOfBoundsException: […]