作者coolcomm (coolcomm)
看板java
標題[J2SE] 看不懂一段泛型
時間Thu Dec 27 17:47:16 2012
http://dl.dropbox.com/u/6319790/2012JavaTWOLambda.zip
這是良葛格的ppt
裡頭第15頁的compose函式是這樣定義的
static
<A, B, C> Func<A, C> compose(final Func<A, B> f, final Func<B, C> g) {
return new Func<A, C>() {
public C apply(A x) {
return g.apply(f.apply(x));
}
};
}
其中Func是一介面 有一apply方法
請問紅字的<A, B, C>指的是什麼意思? 要查也不知道要用甚麼關鍵字
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.43.178.97
1F:推 LaPass:一樣是泛型,不過有兩個型別變數 12/27 17:52
2F:→ LaPass:有用過Map之類的物件嗎? 最常用的型別變數的泛型就是這個 12/27 17:54
我想問的是 如果把
<A, B, C>去掉 程式會沒辦法運作嗎?
3F:推 PsMonkey:你開個 IDE 試試看就知道了阿 ==.== 12/27 18:09
4F:→ coolcomm:正在試 12/27 18:10
5F:→ luoqr:你類別上沒有定義A,B,C 所以function就要定義A,B,C 12/27 18:13
6F:→ coolcomm:無法編譯 但不懂為什麼 12/27 18:13
8F:→ TsaiCF:看不懂一段泛型?還是看不懂泛型? 看看 generic methods 12/27 18:17
懂了.但不太懂為什麼Java語言一定要特別在前面多加註<A, B, C>
如果設計成不用加註不是可以讓人少打一些字嗎?
9F:→ coolcomm:怕打錯字? 12/27 18:26
10F:推 luoqr:你在類別上如果有寫<A,B,C> 後面的method就都不用宣告<A,B,C 12/27 18:27
我想問的是為什麼Java不設計成即使不加<A, B, C>也能編譯通過
11F:推 luoqr:要宣告定義 才能限定你的泛型範圍呀 不然compiler就看不懂了 12/27 18:29
12F:→ luoqr:ex:<T, S extends T> void copy (List <T> a, List <S> b) 12/27 18:30
我知道我的盲點了 謝謝
如果設計成void copy (List<T> a,List<? extends T> b)也能通過編譯
那這樣函式中就沒有辦法宣告型態為S的變數
13F:→ luoqr:如上若不寫定義 S 就沒辦法限定 extends T 12/27 18:31
14F:推 luoqr:是的 12/27 18:35
※ 編輯: coolcomm 來自: 114.43.181.128 (12/27 18:49)