基础比较差,看的有点懵逼
1
avalon0624 2019-12-06 17:33:50 +08:00
不难
|
2
qiyuey 2019-12-06 17:39:19 +08:00
不难,不支持协变和逆变比较可惜
|
3
meteor957 2019-12-06 17:41:47 +08:00
<A<B<C<D<E>>>>>
|
4
dosmlp 2019-12-06 17:42:37 +08:00
不要太容易
|
5
sadfQED2 2019-12-06 17:43:08 +08:00 via Android
真香
|
6
Narcissu5 2019-12-06 17:46:12 +08:00 1
```scala
class ApplicativeOps[M[_],A](ma:M[A])(implicit a:Applicative[M]){ def ~>[B](mb: M[B]):M[B] = a(a(a.pure((_:A) => (b:B) => b), ma),mb) def andKeep[B](mb: M[B]):M[B] = ~>(mb) def <~[B](mb: M[B]):M[A] = a(a(a.pure((a:A) => (_:B) => a), ma),mb) def keepAnd[B](mb: M[B]):M[A] = <~(mb) def <~>[B,C](mb: M[B])(implicit witness: <:<[A,B => C]): M[C] = apply(mb) def apply[B,C](mb: M[B])(implicit witness: <:<[A,B => C]): M[C] = a(a.map(ma,witness),mb) } ``` 贴段 play2 的 scala 代码感受下 |
7
zhaodazzle 2019-12-06 17:52:38 +08:00 via Android 1
@Narcissu5 你的代码为什么骂人
|
8
wsxyeah 2019-12-06 18:19:51 +08:00 via iPhone
可以读下 Core Java 卷一
|
9
voidmnwzp 2019-12-06 18:38:30 +08:00
反正又不是真泛型,稍微会用就行了
|
10
joyhub2140 2019-12-06 18:39:55 +08:00
不难,泛型表面很优雅,但是底层很丑陋。
|
11
kaedea 2019-12-06 18:42:08 +08:00 via Android
泛型不难,泛型变型难上天
|
12
lhx2008 2019-12-06 18:52:52 +08:00 via Android
泛型通配还是挺难的,说容易的看一下 stream 的几个 oprator 的函数的参数吧,一眼看懂算我输
|
13
lhx2008 2019-12-06 18:56:53 +08:00 via Android 1
不过相比 c++的模板,还是大巫见小巫
|
15
fewok 2019-12-06 18:59:54 +08:00
用别人设计的类库不难,难在自己设计
|
16
lotosbin 2019-12-06 19:02:26 +08:00 via iPhone
java 有范型?
|
17
lululau 2019-12-06 19:06:08 +08:00 via iPhone
呵呵,范型要是不难,那 Java 就没有什么难的地方了
|
18
coer 2019-12-06 19:06:59 +08:00 via iPad
那是你还没了解过 c++的模版
|
19
jaylee4869 2019-12-06 19:21:14 +08:00
|
20
wysnylc 2019-12-06 19:29:31 +08:00
能百度出的都不难,学就完事
|
22
mazyi 2019-12-06 21:03:50 +08:00
你应该没有见过 C 的指针
|
24
yuankui 2019-12-06 21:14:34 +08:00
```
export type ResolveArrayThunks<TDispatchProps extends ReadonlyArray<any>> = TDispatchProps extends [infer A1, infer A2, infer A3, infer A4, infer A5, infer A6, infer A7, infer A8, infer A9] ? [HandleThunkActionCreator<A1>, HandleThunkActionCreator<A2>, HandleThunkActionCreator<A3>, HandleThunkActionCreator<A4>, HandleThunkActionCreator<A5>, HandleThunkActionCreator<A6>, HandleThunkActionCreator<A7>, HandleThunkActionCreator<A8>, HandleThunkActionCreator<A9>] : TDispatchProps extends [infer A1, infer A2, infer A3, infer A4, infer A5, infer A6, infer A7, infer A8] ? [HandleThunkActionCreator<A1>, HandleThunkActionCreator<A2>, HandleThunkActionCreator<A3>, HandleThunkActionCreator<A4>, HandleThunkActionCreator<A5>, HandleThunkActionCreator<A6>, HandleThunkActionCreator<A7>, HandleThunkActionCreator<A8>] : TDispatchProps extends [infer A1, infer A2, infer A3, infer A4, infer A5, infer A6, infer A7] ? [HandleThunkActionCreator<A1>, HandleThunkActionCreator<A2>, HandleThunkActionCreator<A3>, HandleThunkActionCreator<A4>, HandleThunkActionCreator<A5>, HandleThunkActionCreator<A6>, HandleThunkActionCreator<A7>] : TDispatchProps extends [infer A1, infer A2, infer A3, infer A4, infer A5, infer A6] ? [HandleThunkActionCreator<A1>, HandleThunkActionCreator<A2>, HandleThunkActionCreator<A3>, HandleThunkActionCreator<A4>, HandleThunkActionCreator<A5>, HandleThunkActionCreator<A6>] : TDispatchProps extends [infer A1, infer A2, infer A3, infer A4, infer A5] ? [HandleThunkActionCreator<A1>, HandleThunkActionCreator<A2>, HandleThunkActionCreator<A3>, HandleThunkActionCreator<A4>, HandleThunkActionCreator<A5>] : TDispatchProps extends [infer A1, infer A2, infer A3, infer A4] ? [HandleThunkActionCreator<A1>, HandleThunkActionCreator<A2>, HandleThunkActionCreator<A3>, HandleThunkActionCreator<A4>] : TDispatchProps extends [infer A1, infer A2, infer A3] ? [HandleThunkActionCreator<A1>, HandleThunkActionCreator<A2>, HandleThunkActionCreator<A3>] : TDispatchProps extends [infer A1, infer A2] ? [HandleThunkActionCreator<A1>, HandleThunkActionCreator<A2>] : TDispatchProps extends [infer A1] ? [HandleThunkActionCreator<A1>] : TDispatchProps extends Array<infer A> ? Array<HandleThunkActionCreator<A>> : TDispatchProps extends ReadonlyArray<infer A> ? ReadonlyArray<HandleThunkActionCreator<A>> : never ; ``` 贴一段 typescript ( redux )的,你感受下。。 |
25
aguesuka 2019-12-06 21:30:03 +08:00
难。平时用简单,但是要实现复杂点的东西就麻烦了。
譬如 Objects.equals(Function.<List>identity(),Function.<ArrayList>identity()) 结果是 true 还是 false 再譬如,java.util.stream.BaseStream<T, S extends BaseStream<T, S>> 再譬如,java.util.stream.Collectors.flatMapping(Function<? super T, ? extends Stream<? extends U>> mapper, Collector<? super U, A, R> downstream) 再譬如,试试把 Stream.flatMap 这个方法加到 BaseStream 里面去。 |
26
Cbdy 2019-12-06 21:33:40 +08:00 via Android
相对比较艰难
|
27
salamanderMH 2019-12-06 21:35:45 +08:00
总比 C++好多了
|
28
Uchiha0bito 2019-12-06 21:44:23 +08:00
不懂先跳过 后面会好的 忽然开朗的那种
|
29
llillill 2019-12-06 23:58:01 +08:00
不难 对比 C++的一堆奇奇怪怪的符号看着都头晕
|
30
tyrantZhao 2019-12-07 13:21:56 +08:00 via Android
你肯定没用过 cpp 模板元
|
31
gowa 2019-12-07 21:37:08 +08:00 via Android 1
楼主题目问的是泛型难不难 各位咂就喜欢拿其他语言说事呢。
泛型这个东西 你就不应该代入具体类的思维去看他。或者你看的时候更应该把泛型参数看成一个具体类去理解这样就没这么难。 当你自下而上的看别人的泛型代码的时候非常难,因为那是高度抽象的东西。 你一直先了解整体的一个逻辑架构 设计目的 才能看得通透。 泛型之所以无比蛋疼,就是因为抽象的过程中给他泛型参数也不做限制。 拿一个实例来看才比较贴切 |
32
huijiewei 2019-12-07 22:44:39 +08:00
感觉没 C#的好用
|
33
abbycin 2019-12-08 09:19:52 +08:00 via Android
cpp 的 template meta programming 了解一下
|
34
waterlaw 2019-12-08 10:02:06 +08:00 via Android
java 的泛型都是假泛型,Map<String, String> map = new Hashmap<>(); Object o = new String("ajax");map.put("ajax", "js"); 查看字节码实际上还是 Map<Object, Object>, 只是 new 的时候保留泛型元数据信息, 实际上运行时执行
Object o = new String("ajax");map.put (( String ) o,( String )"js"), 泛型在编译时会检查。 java 的泛型是参数化类型, 假泛型, 在堆中对象还是 Map<Object, Object> , 本质上还是装箱拆箱的应用,c# 的泛型才是真的。 |
35
waterlaw 2019-12-08 10:05:20 +08:00 via Android
第一个 put 应该是 map.put(o, "js")
|
38
xfriday 2019-12-08 14:02:06 +08:00
就是类型参数化,难个锤子
|
39
chengyiqun 2019-12-08 18:41:37 +08:00
java 只是因为要向下兼容, 所以泛型是假泛型. 运行时会类型擦除, 但是用 map 接收数据库反馈的时候, 倒是会报错类型强制转换异常.
|
40
vipcc 2019-12-08 19:42:09 +08:00 via Android
会者不难,难者不会
|
41
g76 2019-12-27 15:43:39 +08:00
跟 C++ 的比起来,java 的泛型就是个小玩具,食之无味弃之可惜
|