作者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)