小编Nul*_*ter的帖子

根据两个Optionals的值调用不同的方法

在使用Java 8 Optionals时,我经常遇到以下情况.我有两个Optional对象,然后我想根据ifPresent这些Optionals 的值()调用不同的方法.

这是一个例子:

void example(Optional<String> o1, Optional<String> o2) throws Exception {
    if (o1.isPresent() && o2.isPresent()) {
       handler1(o1.get(), o2.get());
    } else if (o1.isPresent()) {
       handler2(o1.get());
    } else if (o2.isPresent()) {
       handler3(o2.get());
    } else {
       throw new Exception();
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,这一系列if-else语句似乎不是一种正确的使用方式Optional(毕竟,它们被添加,以便您可以避免if-else在代码中的任何地方编写这些检查).

使用Optional对象执行此操作的正确方法是什么?

java optional java-8

10
推荐指数
3
解决办法
255
查看次数

Linux上下文切换内部:当进程在计时器中断之前退出时会发生什么?

当计时器中断之前进程退出时,如何在Linux内核中进行上下文切换?

我知道,如果进程正在运行并且发生计时器中断,那么schedule如果设置了该标志,则会自动调用该函数,然后调度函数会选择下一个要运行的进程。基本上,在这种情况下,计划功能在当前进程的上下文中运行,但是,即使在定时器中断之前进程退出,也会发生什么情况?schedule在这种情况下谁调用函数?在什么情况下运行?

linux scheduler ucontext

4
推荐指数
1
解决办法
437
查看次数

extern函数调用main

在阅读Maurice Bach的Unix System Design时,我遇到了下面的代码片段.

#include < signal.h>
char *cp;
int callno;

main() {
    char *sbrk();
    extern catcher();

    signal(SIGSEGV, catcher);
    cp = sbrk(O);
    printf("original brk value %u\n", cp);
    for (;;)
    *cp++ = 1; 
}


catcher(signo) {
    int signo;
    callno++;
    printf("caught sig %d %dth call at addr %u\n", signo, callno, cp);
    sbrk(256);
    signal(SIGSEGV, catcher); 
}
Run Code Online (Sandbox Code Playgroud)

我对main方法中的两个语句感到困惑

char*sbrk();

extern catcher();

我理解是如何extern工作的,我也知道什么sbrk()做但我无法理解为什么他们extern之前写过catcher(),为什么char*sbrk()打电话之前写的?

在编译此代码时,我在Ubuntu上的gcc-4.8.4上遇到了编译错误,但代码在Mac中没有任何错误编译.为什么会这样?

c unix

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

如何以整数存储'09'

我正在研究一个java程序,我需要存储一些从0到16的整数,如00,01等等......

现在,当我将'09'存储为9或'08'为8时,它开始给我错误.

这个这个问题我知道它是八进制表示法.

我的问题是:

有没有办法在JAVA中存储08或09整数?

我必须将数字存储为00,01 ..只有替代方案是什么?

非常感谢!

java

-3
推荐指数
1
解决办法
2745
查看次数

标签 统计

java ×2

c ×1

java-8 ×1

linux ×1

optional ×1

scheduler ×1

ucontext ×1

unix ×1