在使用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对象执行此操作的正确方法是什么?
当计时器中断之前进程退出时,如何在Linux内核中进行上下文切换?
我知道,如果进程正在运行并且发生计时器中断,那么schedule如果设置了该标志,则会自动调用该函数,然后调度函数会选择下一个要运行的进程。基本上,在这种情况下,计划功能在当前进程的上下文中运行,但是,即使在定时器中断之前进程退出,也会发生什么情况?schedule在这种情况下谁调用函数?在什么情况下运行?
在阅读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中没有任何错误编译.为什么会这样?
我正在研究一个java程序,我需要存储一些从0到16的整数,如00,01等等......
现在,当我将'09'存储为9或'08'为8时,它开始给我错误.
我的问题是:
有没有办法在JAVA中存储08或09整数?
我必须将数字存储为00,01 ..只有替代方案是什么?
非常感谢!