看板
[ PLT ]
討論串[問題] Scala 的 Covariant/Contravariant/Inv …
共 17 篇文章
內容預覽:
: public T get();. : public void set(T t);. : }. :. : static void func(A<? extends Number> a) {. : Number n = a.get(); // OK. : a.set(n); // compile t
(還有2420個字)
內容預覽:
看你的描述, 覺得你沒有真的了解我們在說的那個差異.. 上面這個狀況不應該 OK 是沒錯, 有趣的是它不 OK 的原因.. 在 Java 的設計下, compile time error 是這種:. interface A<T> {. T get();. void set(T t);. }. voi
(還有395個字)
內容預覽:
你的意思是不是即使是這樣子,在 scala 設計中也應該是 compiler error(由. compiler 告訴 programmer invariant type 不能 covariant use)?. // compile time error, invariant type T cann
(還有641個字)
內容預覽:
你寫不出來是對的, 這就是 Scala 型別比 Java 嚴謹的關係.. 你的 Value[T] 介面的設計, T 只能是 invariant, 所以將來使用 Value[T]. 的地方, 也不可以隨便宣告成 covariant. 這就是所謂 vairant 由設計者來決定.. 而 Java 就不管
(還有13個字)
內容預覽:
我沒有想到,看來果然是不熟 java generic XD. 這樣說來的話,java generic 確實是 scala generic 的 superset, 對嗎?. 就我目前所知,應該是做不到的。試了一下,這樣的動作,. 感覺像是一種 view, 也就是說把 java.util.List 本身
(還有830個字)