标签: java-10

RandomAccessFile.setLength在Java 10(Centos)上慢得多

以下代码

public class Main {
    public static void main(String[] args) throws IOException {
        File tmp = File.createTempFile("deleteme", "dat");
        tmp.deleteOnExit();
        RandomAccessFile raf = new RandomAccessFile(tmp, "rw");
        for (int t = 0; t < 10; t++) {
            long start = System.nanoTime();
            int count = 5000;
            for (int i = 1; i < count; i++)
                raf.setLength((i + t * count) * 4096);
            long time = System.nanoTime() - start;
            System.out.println("Average call time " + time / count / 1000 + " us.");
        }
    } …
Run Code Online (Sandbox Code Playgroud)

java randomaccessfile java-10

20
推荐指数
1
解决办法
562
查看次数

局部变量的Java 10类型推断可以推断出无效吗?

使用Java 10,我们可以使用类型推断.

String s1 = "hello"; // before Java 10
var s2 = "hello"; // now
Run Code Online (Sandbox Code Playgroud)

但是,有一件事我们以前做不到:有类型为void的变量.

因此,在以前的版本中,我们根本无法定义变量类型void.但是现在我们可以将方法的结果分配给void变量:

void emptyMethod() { }
...

void v1 = emptyMethod(); // won't compile
var v2 = emptyMethod(); // no problem at all
Run Code Online (Sandbox Code Playgroud)

问题是 - 它为什么甚至编译,它的目的是什么?你有这个奇怪的用例吗?

类型变量void没有方法,甚至不能用作方法的参数.

java type-inference java-10

19
推荐指数
1
解决办法
1260
查看次数

如何使用JDK 10安装Netbeans

我尝试使用JavaHome的命令行:

netbeans-trunk-nightly-201803230002-javase-windows.exe --javahome "C:\Program Files\Java\jdk-10"
Run Code Online (Sandbox Code Playgroud)

它应该工作,但我收到一条消息:

指定位置C:\ Program Files\Java\jdk-10中没有JRE

在此输入图像描述

谢谢!

java install netbeans java-home java-10

19
推荐指数
2
解决办法
5万
查看次数

JAXB在Tomcat 9和Java 9/10上不可用

TLDR:在Java 9/10上,Tomcat中的Web应用程序无法访问JAXB,即使它的引用实现存在于类路径中.

编辑:不,这不是如何解决java.lang.NoClassDefFoundError:Java 9中的javax/xml/bind/JAXBException的副本- 正如您在"我尝试过的内容"部分所述,我已经尝试了所提出的解决方案.

情况

我们有一个在Tomcat上运行的Web应用程序,它依赖于JAXB.在我们迁移到Java 9期间,我们选择将JAXB参考实现添加为常规依赖项.

具有嵌入式Tomcat的IDE启动应用程序时,一切正常,但在真正的Tomcat实例上运行时,我收到此错误:

Caused by: java.lang.RuntimeException: javax.xml.bind.JAXBException:
    Implementation of JAXB-API has not been found on module path or classpath.
 - with linked exception:
[java.lang.ClassNotFoundException: com.sun.xml.internal.bind.v2.ContextFactory]
    at [... our-code ...]
Caused by: javax.xml.bind.JAXBException: Implementation of JAXB-API has not been found on module path or classpath.
    at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:278) ~[jaxb-api-2.3.0.jar:2.3.0]
    at javax.xml.bind.ContextFinder.find(ContextFinder.java:421) ~[jaxb-api-2.3.0.jar:2.3.0]
    at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:721) ~[jaxb-api-2.3.0.jar:2.3.0]
    at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:662) ~[jaxb-api-2.3.0.jar:2.3.0]
    at [... our-code ...]
Caused by: …
Run Code Online (Sandbox Code Playgroud)

java tomcat java-9 java-10

19
推荐指数
3
解决办法
6575
查看次数

什么类型的令牌恰好是Java 10中的"var"?

在最后一期Heinz Kabutz的时事通讯#255 Java 10:推断的局部变量中,显示它var不是Java 10中的保留字,因为您也可以使用它var作为标识符:

public class Java10 {
    var var = 42; // <-- this works
}
Run Code Online (Sandbox Code Playgroud)

但是,您不能使用ie assert作为标识符var assert = 2,因为它assert是一个保留字.

正如在链接的时事通讯中所说的那样,var不是保留字的事实是好消息,因为这允许来自Java的先前版本的代码var用作标识符在Java 10中编译而没有问题.

那么,那是什么var?它既不是显式类型也不是语言的保留字,因此它被允许作为标识符,但是当它用于在Java 10中声明局部变量时它确实具有特殊含义.我们究竟在一个上下文中调用它局部变量声明?

此外,除了支持向后兼容性(通过允许包含var作为标识符的旧代码进行编译),还有其他优点是var 不是保留字吗?

java java-10

18
推荐指数
2
解决办法
1264
查看次数

限制和无序流的内部更改

基本上这是在试图回答另一个问题时出现的.假设这段代码:

AtomicInteger i = new AtomicInteger(0);
AtomicInteger count = new AtomicInteger(0);
IntStream.generate(() -> i.incrementAndGet())
        .parallel()
        .peek(x -> count.incrementAndGet())
        .limit(5)
        .forEach(System.out::println);

System.out.println("count = " + count);
Run Code Online (Sandbox Code Playgroud)

我理解这IntStream#generate是一个无序的无限流的事实,并且要完成它必须有一个短路操作(limit在这种情况下).我也明白,在Supplier达到该限制之前,Stream实现的次数可以自由调用.

在java-8下运行它会count一直打印512(可能并不总是,但在我的机器上是这样).

在对比运行中,这在java-10下很少超过5.所以我的问题是内部发生了什么变化,短路发生得更好(我试图通过拥有源并试图做一些差异来解决这个问题......)

java java-8 java-stream java-10

18
推荐指数
1
解决办法
263
查看次数

Maven:目标版本无效:10

我正在尝试编译我的maven项目,Java 10但我遇到了麻烦.在我的IDE(IntelliJ IDEA)中,所有内容都编译并运行得很好Java 10.我安装了最新maven版本3.5.4并指出JAVA_HOMEJDK 10:

$ mvn --version
Apache Maven 3.5.4 (1edded0938998edf8bf061f1ceb3cfdeccf443fe; 2018-06-17T20:33:14+02:00)
Maven home: C:\Maven\bin\..
Java version: 10.0.2, vendor: Oracle Corporation, runtime: C:\Program Files\Java\jdk-10.0.2
Default locale: en_US, platform encoding: Cp1252
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"
Run Code Online (Sandbox Code Playgroud)

maven我使用的命令是:

mvn package -Dmaven.test.skip
Run Code Online (Sandbox Code Playgroud)

在我,pom.xml我有以下Java 8工作正常:

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <libraries.directory>libraries</libraries.directory>
</properties>
Run Code Online (Sandbox Code Playgroud)

因为Java 10我把它改成了以下内容:

<maven.compiler.source>10</maven.compiler.source>
<maven.compiler.target>10</maven.compiler.target> …
Run Code Online (Sandbox Code Playgroud)

java pom.xml maven java-10

18
推荐指数
7
解决办法
3万
查看次数

"var"和原始类型如何结合在一起?

我发现了一个建议使用的答案

var list = new ArrayList();
Run Code Online (Sandbox Code Playgroud)

我很惊讶在这里找到一个原始类型,我只是想知道:确实var使用<>"自动?

(与此同时,答案改为使用<String>,但我仍然对这里的"原则"感到好奇)

我看到其他的问题,比如这个,但它们都使用了钻石操作:

var list = new ArrayList<>();
Run Code Online (Sandbox Code Playgroud)

现在我只想知道:是否会var改变我们应该(不)使用原始类型的方式?或者这个建议<>只是遗漏了不好的做法?

java generics var local-variables java-10

18
推荐指数
2
解决办法
2162
查看次数

Java 9是否包含Graal?

我正在读JEP 317.它说Graal(一个新的基于实验Java的JIT编译器)将成为JDK 10的一部分,但后来它说已经在JDK 9中可用了.那么,JEP 317的重点是什么呢?Java 9是否包含Graal?

java java-9 java-10 graalvm

17
推荐指数
1
解决办法
2413
查看次数

java 10 compilaton Null Pointer Exception

我最近安装了jdk10.我正在做正常的代码,但它无法正常工作.

我在这里做错了吗?请参阅代码和异常堆栈跟踪.据我所知,这种行为应该没有理由.

import com.bean.College;

public class Student {

    interface Club {
        <T> T get(College<T> key);
    }

    private Club club;

    Student() {
        Object obj = club.get(new College<>() {});
    }
}
Run Code Online (Sandbox Code Playgroud)

导入的College类是:

public class College<T> {
    int id;
    protected College() {
    }

    College(int id){
        this.id=id;
    }
} 
Run Code Online (Sandbox Code Playgroud)

在编译时,javac编译器与以下堆栈跟踪崩溃:

java.lang.NullPointerException
        at jdk.compiler/com.sun.tools.javac.comp.Flow$FlowAnalyzer.visitApply(Flow.java:1233)
        at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCMethodInvocation.accept(JCTree.java:1634)
        at jdk.compiler/com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:49)
        at jdk.compiler/com.sun.tools.javac.comp.Flow$BaseAnalyzer.scan(Flow.java:396)
        at jdk.compiler/com.sun.tools.javac.comp.Flow$FlowAnalyzer.visitVarDef(Flow.java:987)
        at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCVariableDecl.accept(JCTree.java:956)
        at jdk.compiler/com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:49)
        at jdk.compiler/com.sun.tools.javac.comp.Flow$BaseAnalyzer.scan(Flow.java:396)
        at jdk.compiler/com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:57)
        at jdk.compiler/com.sun.tools.javac.comp.Flow$FlowAnalyzer.visitBlock(Flow.java:995)
        at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:1020)
        at jdk.compiler/com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:49)
        at jdk.compiler/com.sun.tools.javac.comp.Flow$BaseAnalyzer.scan(Flow.java:396)
        at jdk.compiler/com.sun.tools.javac.comp.Flow$FlowAnalyzer.visitMethodDef(Flow.java:962)
        at …
Run Code Online (Sandbox Code Playgroud)

java compiler-errors javac java-9 java-10

17
推荐指数
1
解决办法
987
查看次数