
最近在研究 Rxjava 中发现使用了这样的写法。
public abstract class AsyncJob<T> { public <R>AsyncJob<R> map(Func<T,R> func){ } } 对于 <R>AsyncJob<R> 这种写法感到陌生,问了一圈同事都说不清楚。
一开始以为是泛型相关,然而没有查到相关介绍。
最后在这篇博客看到 [ java 中返回任意类型值]
大概知道了这是一种 [返回任意类型] 的语法,有人熟悉并知道正确的叫法吗?
1 ex1gtnim7d OP 没见过的可以顶一下,看下有多少人跟我一样( ω ) |
2 Cbdy Jul 20, 2018 via Android Java 泛型了解一下 |
3 PhxNirvana Jul 20, 2018 这不就是泛型么。。。 |
4 oracle128g Jul 20, 2018 via iPhone 方法返回值前面的泛型代表是方法自定义的类型,跟类上的泛型无关。大概意思就是不使用类上定义的泛型。不对的有请楼下补充 |
5 qiyuey Jul 20, 2018 这就是个泛型。。。 |
6 zhouyou457 Jul 20, 2018 public static <T> T getBean(Class<T> clazz) { return getApplicationContext().getBean(clazz); } 泛型这种写法太常见了... |
7 SmallZheng Jul 20, 2018 via Android 就是泛型呀,AsyncJob<R> 是返回值 |
8 lhx2008 Jul 20, 2018 via Android 可能是没有空格? R 是从输入参数捕捉的 |
9 ex1gtnim7d OP @oracle128g 就是说最前面的<R>可以看作是一种声明吗 |
10 cuzfinal Jul 20, 2018 你是没看过 C++的模板。 |
11 feiyuanqiu Jul 20, 2018 via Android https://docs.oracle.com/javase/tutorial/extra/generics/methods.html |
12 coffeSlider Jul 20, 2018 via Android 这也太水了吧 |
13 kansimeng Jul 20, 2018 基础都没打还研究什么 Rxjava? |
14 theohateonion Jul 20, 2018 .....我一个前端都知道这是泛型 |
15 easylee Jul 20, 2018 via Android 我也觉着是泛型,如果不是的话,请 at 我回来看看。 |
16 ex1gtnim7d OP @kansimeng 现在研究不行? |
17 ex1gtnim7d OP @feiyuanqiu thanks |
18 metrxqin Jul 20, 2018 你们也是医药专业转 Java 的吗? |
19 Athrob Jul 20, 2018 ``` public abstract class AsyncJob<T> { public AsyncJob<R> map<R>(Func<T,R> func) { } } ``` 这样我就能看懂了, 我是 C# |
20 FunnyCodingXu Jul 20, 2018 最基础的泛型。。。好好看书学基础吧 |
21 Athrob Jul 20, 2018 回复不支持`markdown`吗 |
22 hsuan Jul 20, 2018 泛型方法,楼主应该再好好学学 java。 |
23 sagaxu Jul 20, 2018 via Android 这都不熟,是 php 转 java 的吗? |
24 Lonely Jul 20, 2018 via iPhone 人才………………………………………… |
25 deadEgg Jul 20, 2018 public <R> ArrayList<R> map(R func){} 这样写楼主是不是就是秒懂了。 |
26 xhinliang Jul 20, 2018 这就是泛型啊 |
27 KuroNekoFan Jul 20, 2018 via iPhone generic type 啊 |
28 ntdll Jul 20, 2018 public <R> R get(R a) 把 R 随便替换成一个已经类型,你是不是就看得懂了,比如说 String public String get(String a) public 后面紧跟的<R>只是申明了一个泛型的名称而已,语法需要,并没有实际意义。 |
29 xiaojunjor Jul 20, 2018 ??? 骗金币的??? 我不写 java 多看得懂。。 |
30 notreami Jul 20, 2018 Rxjava 里,我最恶心的是那堆 Func1、Func2、Func3、Func4 |
32 pexcn Jul 20, 2018 这算是比较常见的吧... |
33 seaswalker Jul 20, 2018 方法级别的泛型吧 |
34 rockyou12 Jul 20, 2018 @noreami java 语言就这样,做任意泛型参数数量也只能这样了,反正用 lambda 就可以当他们不存在了…… 用了 kotlin 更爽,这种 lambda 都不需要写个 interface 来定义了 |
35 ex1gtnim7d OP @gam2046 一直看得懂,换成 public R get(R a)我更看得懂,我只是不明白为什么要在 R 前面多加一个<R>,就是过来问问这是什么语法...,因为现在网上随便搜个 Java 泛型的介绍文章一般都只讲类上的泛型和参数上的泛型,有哪篇讲到这种情况的 |
36 ntdll Jul 20, 2018 语法需要呀。告诉编译器 R 是一个泛型参数。 public R get(R a) 直接这样写,R 在上下文中没有定义,就是语法错误了。天知道 R 是什么东西?在 public 后面加上<R>就是告诉编译器,后面的那个 R 是个泛型( object 类型)。讲到这个,真的是,Java 这个基于类型擦除的假泛型,有时候用起来是真的糟心。 扩展一下 public <I,O> O get(I input) <I,O>就是申明了这个方法里有两个泛型参数,I 和 O public <A,B,C,D,E> get(B input) 那就是有 A/B/C/D/E 五个泛型参数。 |
37 ex1gtnim7d OP @gam2046 万分感谢! |
38 don2012 Jul 20, 2018 via Android 基础不行啊楼主 |
39 kaedea Jul 20, 2018 via Android 实例泛型方法,比较能理解,因为涉及到继承,还需要考虑到协变和异变的问题... |
40 kaedea Jul 20, 2018 via Android 把类型参数换成 Object,然后用个静态泛型方法保护一下比较好 |
41 JohnZorn Jul 22, 2018 但是实例方法的话 不必声明持有泛型吧 似乎静态才需要声明为返回方法 或者说标记持有此泛型 |
42 Trumeet Jul 25, 2018 via Android 泛型了解一下? |