标签: java-9

Java中lambda() - > {}的含义

我正在看下面的Stack Overflow答案: 如何在运行时更改Spring的@Scheduled fixedDelay

在代码中有以下行:

schedulerFuture = taskScheduler.schedule(() -> { }, this);
Run Code Online (Sandbox Code Playgroud)

我想知道lambda () -> {}在该代码中的含义.我需要在不使用lambdas的情况下编写它.

java lambda java-7 java-8 java-9

26
推荐指数
1
解决办法
2620
查看次数

JSR-305注释替代Java 9

到目前为止,我们一直在使用Findbugs JSR-305注释(com.google.code.findbugs:jsr305),包括工具支持(Sonar,Eclipse,Findbugs,...)在内的一切工作正常.

但是我们的理解是Java 9中的Jigsaw将打破JSR-305注释(不允许在两个模块中使用一个包).这在JavaOne 2015上得到了证实.Oracle的推理是JSR-305从未发生过,JSR-250必须支持这些注释.

我们正在寻找可以在Java 8和Java 9中工作的JSR-305注释的替换.如果历史是任何指南,Java 9 GA和Java 8 EOL之间的时间将相当短,我们想修复我们的任何不兼容性提前编码.从理论上讲,我们可以升级JDK的注释模块,但是在我们的工具链中执行此操作似乎需要做很多工作.

annotations static-analysis jsr305 java-platform-module-system java-9

25
推荐指数
1
解决办法
3643
查看次数

在Java 9中重载的方便工厂方法的重点是什么?

Java 9附带了用于创建不可变列表的便捷工厂方法.最后,列表创建非常简单:

List<String> list = List.of("foo", "bar");
Run Code Online (Sandbox Code Playgroud)

但是这个方法有12个重载版本,11个有0到10个元素,另一个有var args.

static <E> List<E>  of(E... elements)
Run Code Online (Sandbox Code Playgroud)

同样是与案件SetMap.

由于存在var args方法,有多少11种方法有什么意义呢?

我认为var-args创建一个数组,所以其他11个方法可以跳过创建一个额外的对象,在大多数情况下会有0-10个元素.还有其他原因吗?

java collections variadic-functions java-9

25
推荐指数
3
解决办法
1801
查看次数

有没有办法防止ClosedByInterruptException?

在下面的示例中,我有两个线程使用的一个文件(在实际示例中,我可以有任意数量的线程)

import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;

public class A {
    static volatile boolean running = true;

    public static void main(String[] args) throws IOException, InterruptedException {
        String name = "delete.me";
        new File(name).deleteOnExit();
        RandomAccessFile raf = new RandomAccessFile(name, "rw");
        FileChannel fc = raf.getChannel();

        Thread monitor = new Thread(() -> {
            try {
                while (running) {
                    System.out.println(name + " is " + (fc.size() >> 10) + " KB");

                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        System.out.println("Interrupted");
                        Thread.currentThread().interrupt(); …
Run Code Online (Sandbox Code Playgroud)

java filechannel interrupt java-9

25
推荐指数
3
解决办法
1628
查看次数

我该如何命名我的Java 9模块?

假设我有一个带groupId = org.abc和的库artifactId = myLibrary.模块名称的推荐名称是什么:myLibraryorg.abc.myLibrary?是否有任何命名方案的官方指南?

java java-9 java-module

24
推荐指数
2
解决办法
3409
查看次数

Java 9,Set.of()和Map.of()varargs重载

我正在研究Immutable收藏的工厂方法.我看到该Set.of()方法有10个varargs重载(相同Map.of()).我真的不明白为什么会这么多.最后,ImmutableCollections.SetN<>(elements)无论如何都会调用该函数.

在文档中我发现了这个:

虽然这会在API中引入一些混乱,但它避免了varargs调用引起的数组分配,初始化和垃圾收集开销.

杂乱的确是值得的性能提升吗?如果是,理想情况下是否会为任何N元素创建单独的方法?

java collections java-9

24
推荐指数
2
解决办法
2367
查看次数

Cassandra和Java 9 - ThreadPriorityPolicy = 42超出允许范围

最近我从官方网站安装了JDK 9和Apache Cassandra.但是现在当我在前台启动cassandra时,我得到了这样的信息:

apache-cassandra-3.11.1/bin$ ./cassandra -f

[0.000s][warning][gc] -Xloggc is deprecated. Will use -Xlog:gc:/home/mmatak/monero/apache-cassandra-3.11.1/logs/gc.log instead.
intx ThreadPriorityPolicy=42 is outside the allowed range [ 0 ... 1 ]
Improperly specified VM option 'ThreadPriorityPolicy=42'
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
Run Code Online (Sandbox Code Playgroud)

到目前为止,我没有找到任何解决方案.Java 9和Cassandra可能还不兼容吗?这也是提到的问题 - #CASSANDRA-13107

但我不知道如何"删除旗帜"?在哪里可以覆盖或删除此标志?

jvm jvm-arguments cassandra java-9

24
推荐指数
3
解决办法
1万
查看次数

私有接口方法的方法参考

请考虑以下代码:

public class A {
    public static void main(String[] args) {
        Runnable test1 = ((I)(new I() {}))::test;  // compiles OK
        Runnable test2 = ((new I() {}))::test;     // won't compile 
    }

    interface I {
        private void test() {}
    }
}
Run Code Online (Sandbox Code Playgroud)

我真的不明白......我明白这种test()方法是私密的.但是,如果我们将匿名类强制转换为其接口,会发生什么变化((I)(new I() {}))?更确切地说,我希望看到一个允许该技巧的特定JLS点.

PS我已将其报告为编译器的错误(ID:9052217).在我看来,Runnable test2 = ((new I() {}))::test;在这种特殊情况下应该编译得很好.

PPS到目前为止,根据我的报告创建了一个错误:https://bugs.openjdk.java.net/browse/JDK-8194998.它可能会被关闭为"不会修复"或者什么.

java language-lawyer java-9

24
推荐指数
4
解决办法
1943
查看次数

使用JShell实例共享动态加载的类

请查看以下编辑内容

我正在尝试创建一个JShell实例,它允许我访问,并允许我与它创建的JVM中的对象进行交互.这适用于在编译时可用的类但对于动态加载的类失败.

public class Main {

    public static final int A = 1;
    public static Main M;

    public static void main(String[] args) throws Exception {
        M = new Main();
        ClassLoader cl = new URLClassLoader(new URL[]{new File("Example.jar").toURL()}, Main.class.getClassLoader());
        Class<?> bc = cl.loadClass("com.example.test.Dynamic");//Works
        JShell shell = JShell.builder()
                .executionEngine(new ExecutionControlProvider() {
                    @Override
                    public String name() {
                        return "direct";
                    }

                    @Override
                    public ExecutionControl generate(ExecutionEnv ee, Map<String, String> map) throws Throwable {
                        return new DirectExecutionControl();
                    }
                }, null)
                .build(); …
Run Code Online (Sandbox Code Playgroud)

java dynamic-class-loaders java-9 jshell

24
推荐指数
1
解决办法
620
查看次数

什么是自动模块?

在stackoverflow上多次提到自动模块,但我找不到自动模块的完整,简洁和自给自足的定义.

那么,什么是自动模块?它是否导出所有包裹?它打开所有包裹吗?它是否读取所有其他模块?

java java-platform-module-system java-9 java-module

23
推荐指数
3
解决办法
4129
查看次数