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