備註:若後續有改動,此文件不會再更新,請改參考此文件
分為兩個部份:「class 定義」、「class 間的關係」。
由於 generic type 的定義哏(後敘),
先寫「class 定義」再寫「class 間的關係」比較保險。
備註:若後續有改動,此文件不會再更新,請改參考此文件
分為兩個部份:「class 定義」、「class 間的關係」。
由於 generic type 的定義哏(後敘),
先寫「class 定義」再寫「class 間的關係」比較保險。
直接上 SSCCE:
public class SpriteTestEP extends DrawComponent implements EntryPoint {
private RectangleSprite red = new RectangleSprite(200, 201, 100, 50);
private RectangleSprite none = new RectangleSprite(200, 201, 300, 50);
public SpriteTestEP() {
red.setFill(RGB.RED);
none.setFill(Color.NONE);
addSprite(red);
addSprite(none);
addSpriteOverHandler(new SpriteOverHandler() {
@Override
public void onSpriteOver(SpriteOverEvent event) {
log("Over : " + who(event.getSprite()));
}
});
addSpriteOutHandler(new SpriteOutHandler() {
@Override
public void onSpriteLeave(SpriteOutEvent event) {
log("Out : " + who(event.getSprite()));
}
});
}
private String who(Sprite sprite) {
return (sprite == red ? "red" : "none");
}
public static native void log(Object object) /*-{
console.log(
@java.lang.String::valueOf(Ljava/lang/Object;)(object)
);
}-*/;
@Override
public void onModuleLoad() {
//無關緊要,純粹 follow GXT 習慣 XD
Viewport vp = new Viewport();
vp.add(this);
RootPanel.get().add(vp);
}
}
操作步驟:
原文網址:https://www.infoworld.com/article/3534133/jdk-15-the-new-features-in-java-15.html
Java Development Kit 15 是 Java SE 的下個版本,Oracle 的實做在 6/11 進入到初期的 ramp-down phase,該版本的功能集已經定型了。JDK 15 的亮點包含 text block、hidden class、foreign memory 存取 API 以及 sealed class、record 的 preview 版本。
Java upgrade 也進入到 ramp-down phase,兩個候選版本會在 8/20 之前釋出。general availability 會在 9/15。JDK 15 的前身是 3/17 發布的 JDK 14。Oracle 在 Java SE 保持著 6 個月發布一次新版的步調,每年會有兩個新的版本問世。
OpenJDK 15 的新功能與改變:
java.net.datagram.Socket 以及 java.net.MulticastSocket API 換成簡單且較現代的實做方式。這帶來幾點好處:1. 容易除錯與維護。2. 使用 Project Loom 正在開發的 virtual thread。新的計畫會依循 JEP 353(重新實做古老的 Socket API)。目前 java.net.datagram.Socket 以及 java.net.MulticastSocket 的實做可以回溯至 JDK 1.0,那時 IPv6 還在開發中。這造成目前 MulticastSocket 的實做試著調解 IPv4 跟 IPv6 導致很難維護。instanceof 的 pattern matching 的 preview 二版。pattern matching 主要可以讓「在程式當中用特定條件取出 object 的 component」的表示法變得更簡潔。像 Haskell 跟 C# 都因為其簡約與安全的特性而包含 pattern matching。misc.Unsafe::defineAnonymousClass,這代表未來的版本會移除掉。同樣地,Java 語言並不會因為這個提案而有所改變。@JsAsync 跟 @JsEnum)做 compile,這會讓 GWT2 將可以用 J2CL 以及這些工具來 compile。NoSuchMethodException 的模擬。float[] 與 double[] 的 Arrays.binarySearch()。DiskCache 增加關閉的 hook 來清除暫存檔們。this 一定不是 null」String.regionMatches()。JsMethods 允許跟實做程式碼以相同名稱共存。Double.compare() 與 Float.compare() 正確地處理負 0。Arrays 現在有 implement Cloneable。AtomicReference 加到 gwt/emul。ScriptInjectorExecutorService 與 ScheduledExecutorService 的部份功能模擬。java.util.concurrent.Flow。javax.annotation{,.processing}.Generated。goog.global 沒有定義時,讓他變成 $wnd。when-linker-added element definition。Reader 以及 StringReader 模擬。DataflowOptimizer,用到時會發出警告。更多細節參見 commit log
最近想要在 UI component 出現 / 消失的時候自動做一些事情,於是打算從 GXT Component 下手。不過怎麼寫怎麼有問題,只好寫 n 個 SSCCE 來確認一下,實驗結果紀錄於此。
我關心這四個 method:
onLoad()onUnload()onShow()onHide()onLoad() 跟 onUnload() 是從 GWT 的 Widget 就定義的 method。理論上跟 onAttach()、onDetach() 等意,就是這個 component 加入到 DOM(或是從 DOM 中移除)時會觸發的 method。不過 API 都強烈建議用 onLoad() 跟 onUnload() 了,就乖乖照辦。
onShow()、onHide() 是 GXT Component 開始定義的 method,最常遇到的 caller 大概是 GXT Component 的 setVisible()(override UIObject)。