※Optional
※of和ofNullable
final String str = null;
// of
// 下行java.lang.NullPointerException
Optional<String> optional1 = Optional.of(str);
System.out.println("opt1=" + optional1.get());
// ofNullable
Optional<String> optional2 = Optional.ofNullable(str);
// 下行java.util.NoSuchElementException: No value present
System.out.println("opt2=" + optional2.get());
※of:如果是null,不用再呼叫方法就會直接拋空指針例外
※ofNullable:如果是null,會回傳Optional.empty,如果再呼叫方法會拋NoSuchElementException 例外
※判斷
public class Test {
public static void main(String[] args) {
final String str = null;
// if判斷
Optional<String> optional = Optional.ofNullable(str);
if (optional.isPresent()) {
System.out.println(optional.get());
} else {
System.out.println(Optional.empty());// Optional[?] | Optional.empty
}
// 使用三元運算子判斷
System.out.println(optional.isPresent() ? Optional.of(str) : Optional.empty());
// 不用判斷
System.out.println(optional.orElse("default value"));
// 做完事再回傳
String rtn = optional.orElseGet(() -> {
System.out.println("do something");
return Optional.empty().toString();
});
System.out.println("rtn=" + rtn);
// 直接拋例外
optional.orElseThrow(() -> new XxxException("null->exception"));
}
}
class XxxException extends RuntimeException {
public XxxException() {
super();
}
public XxxException(String message) {
super(message);
System.out.println("message=" + message);
}
}
※
※Nashorn
參考資料和javascript溝通的工具jjs,也是java8新增的
在命令提示字元打上jjs -h可以看到說明
我在d槽新增一個叫jjsTest.js的檔案,內容如下:
let a = 1;
let b = 2;
print(a+b);
上圖可以看到有5個紅框,第一個紅框確定內容
第二個紅框出錯了,因為它不認識let關鍵字,因為這是es6才有的
第三個紅框加上--language=es6就認識let了
第四個紅框--後面加上要傳進去的參數,但--後面要有空格,所以出錯了
第五個紅框使用arguments.join將傳進去的參數用「, 」隔開了
離開時要打quit()
※test.java
ScriptEngineManager sem = new ScriptEngineManager();
ScriptEngine nashorn = sem.getEngineByName("nashorn");
String xxx = "Hello nashorn";
try {
nashorn.eval("print('" + xxx + "')");
System.out.println((Integer) nashorn.eval("10 + 2"));
} catch (ScriptException e) {
System.out.println("message=" + e.getMessage());
}
※EngineByName的字串一定要是nashorn
※jjsTest.js
var arrayList = Java.type('java.util.ArrayList');
function lookList() {
var list = new arrayList;
list.add(1);
list.add(2);
print(list);
}
lookList();
※Java.type就類似import
※不能加泛型
※在命令提示字元打上jjs jjsTest.js可看到結果

沒有留言:
張貼留言