[問題] 如何做一個類別,讓它能被 boxing conversion
我正在做一個類神經網路
類神經元和類神經元之間有「鍵結值」
我把「鍵結值」做成一個新的類別: Weight
它會是一個浮點數,所以 Weight 的類別宣告如下:
public final class Weight extends Float
略懂 Java 的人都知道,這樣做是不合法的
因為 Float 是一個 final class, 所以無法被繼承到 Weight
我改為以下寫法:
public final class Weight extends Number
並且增加一個成員變數: weight, 其型態為 Float, 作為「鍵結值」的真正數值
但是我在寫類神經元這個類別的時候,一次需要處理多個「鍵結值」,所以需要一個容器
來裝這些 Weight:
ArrayList<Weight> W = new ArrayList<Weight>();
W.add(123);
W.add(456);
W.add(789);
略懂 Java 的人都知道,這樣做是不合法的
因為 Weight 不是 Number 也不是 Float, 它只是繼承了 Number 罷了
Boxing conversion 並不會作用,所以連編譯都不會過
我改為以下寫法:
ArrayList<Weight> W = new ArrayList<Weight>();
W.add(new Weight(123));
W.add(new Weight(456));
W.add(new Weight(789));
這樣雖然程式會動,但是我認為程式碼實在是醜得要命
如果有辦法做出一個類別能夠支援 Boxing conversion 就好了
就像 W.add(123); 這樣乾淨又簡單
請問有辦法做到這回事嗎?
--
選擇做一個 Weight 類別而不直接用 Float 當作「鍵結值」型態的原因
是我打算利用虛擬資料型態來描述整個系統,而不要什麼都基本型態,搞亂思維。
也就是說,我想保留 Weight 類別,但又想讓它能夠 Boxing convert 一個 float value
成為 Weight 類別。不知道有沒有辦法可以達成呢?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.115.205.85