※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可看到結果
沒有留言:
張貼留言