有多少人熟悉 Java 如下语法: public <R> R get(R a) - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
ex1gtnim7d
V2EX    Java

有多少人熟悉 Java 如下语法: public <R> R get(R a)

  •  1
     
  •   ex1gtnim7d Jul 20, 2018 5240 views
    This topic created in 2838 days ago, the information mentioned may be changed or developed.

    最近在研究 Rxjava 中发现使用了这样的写法。

    public abstract class AsyncJob<T> { public <R>AsyncJob<R> map(Func<T,R> func){ } } 

    对于 <R>AsyncJob<R> 这种写法感到陌生,问了一圈同事都说不清楚。

    一开始以为是泛型相关,然而没有查到相关介绍。

    最后在这篇博客看到 [ java 中返回任意类型值]

    大概知道了这是一种 [返回任意类型] 的语法,有人熟悉并知道正确的叫法吗?

    42 replies    2018-07-25 20:17:08 +08:00
    ex1gtnim7d
        1
    ex1gtnim7d  
    OP
       Jul 20, 2018
    没见过的可以顶一下,看下有多少人跟我一样( ω )
    Cbdy
        2
    Cbdy  
       Jul 20, 2018 via Android
    Java 泛型了解一下
    PhxNirvana
        3
    PhxNirvana  
       Jul 20, 2018
    这不就是泛型么。。。
    oracle128g
        4
    oracle128g  
       Jul 20, 2018 via iPhone   1
    方法返回值前面的泛型代表是方法自定义的类型,跟类上的泛型无关。大概意思就是不使用类上定义的泛型。不对的有请楼下补充
    qiyuey
        5
    qiyuey  
       Jul 20, 2018
    这就是个泛型。。。
    zhouyou457
        6
    zhouyou457  
       Jul 20, 2018
    public static <T> T getBean(Class<T> clazz) {
    return getApplicationContext().getBean(clazz);
    }

    泛型这种写法太常见了...
    SmallZheng
        7
    SmallZheng  
       Jul 20, 2018 via Android
    就是泛型呀,AsyncJob<R> 是返回值
    lhx2008
        8
    lhx2008  
       Jul 20, 2018 via Android
    可能是没有空格? R 是从输入参数捕捉的
    ex1gtnim7d
        9
    ex1gtnim7d  
    OP
       Jul 20, 2018
    @oracle128g 就是说最前面的<R>可以看作是一种声明吗
    cuzfinal
        10
    cuzfinal  
       Jul 20, 2018   2
    你是没看过 C++的模板。
    coffeSlider
        12
    coffeSlider  
       Jul 20, 2018 via Android   1
    这也太水了吧
    kansimeng
        13
    kansimeng  
       Jul 20, 2018   1
    基础都没打还研究什么 Rxjava?
    theohateonion
        14
    theohateonion  
       Jul 20, 2018
    .....我一个前端都知道这是泛型
    easylee
        15
    easylee  
       Jul 20, 2018 via Android
    我也觉着是泛型,如果不是的话,请 at 我回来看看。
    ex1gtnim7d
        16
    ex1gtnim7d  
    OP
       Jul 20, 2018 via Android
    @kansimeng 现在研究不行?
    ex1gtnim7d
        17
    ex1gtnim7d  
    OP
       Jul 20, 2018 via Android
    @feiyuanqiu thanks
    metrxqin
        18
    metrxqin  
       Jul 20, 2018
    你们也是医药专业转 Java 的吗?
    Athrob
        19
    Athrob  
       Jul 20, 2018
    ```
    public abstract class AsyncJob<T> {

    public AsyncJob<R> map<R>(Func<T,R> func) {

    }

    }
    ```
    这样我就能看懂了, 我是 C#
    FunnyCodingXu
        20
    FunnyCodingXu  
       Jul 20, 2018
    最基础的泛型。。。好好看书学基础吧
    Athrob
        21
    Athrob  
       Jul 20, 2018
    回复不支持`markdown`吗
    hsuan
        22
    hsuan  
       Jul 20, 2018
    泛型方法,楼主应该再好好学学 java。
    sagaxu
        23
    sagaxu  
       Jul 20, 2018 via Android
    这都不熟,是 php 转 java 的吗?
    Lonely
        24
    Lonely  
       Jul 20, 2018 via iPhone
    人才…………………………………………
    deadEgg
        25
    deadEgg  
       Jul 20, 2018
    public <R> ArrayList<R> map(R func){}

    这样写楼主是不是就是秒懂了。
    xhinliang
        26
    xhinliang  
       Jul 20, 2018
    这就是泛型啊
    KuroNekoFan
        27
    KuroNekoFan  
       Jul 20, 2018 via iPhone
    generic type 啊
    ntdll
        28
    ntdll  
       Jul 20, 2018   2
    public <R> R get(R a)

    把 R 随便替换成一个已经类型,你是不是就看得懂了,比如说 String

    public String get(String a)

    public 后面紧跟的<R>只是申明了一个泛型的名称而已,语法需要,并没有实际意义。
    xiaojunjor
        29
    xiaojunjor  
       Jul 20, 2018
    ???
    骗金币的???
    我不写 java 多看得懂。。
    notreami
        30
    notreami  
       Jul 20, 2018
    Rxjava 里,我最恶心的是那堆 Func1、Func2、Func3、Func4
    ghos
        31
    ghos  
       Jul 20, 2018
    @notreami 双手赞成
    pexcn
        32
    pexcn  
       Jul 20, 2018
    这算是比较常见的吧...
    seaswalker
        33
    seaswalker  
       Jul 20, 2018
    方法级别的泛型吧
    rockyou12
        34
    rockyou12  
       Jul 20, 2018
    @noreami java 语言就这样,做任意泛型参数数量也只能这样了,反正用 lambda 就可以当他们不存在了……

    用了 kotlin 更爽,这种 lambda 都不需要写个 interface 来定义了
    ex1gtnim7d
        35
    ex1gtnim7d  
    OP
       Jul 20, 2018
    @gam2046 一直看得懂,换成 public R get(R a)我更看得懂,我只是不明白为什么要在 R 前面多加一个<R>,就是过来问问这是什么语法...,因为现在网上随便搜个 Java 泛型的介绍文章一般都只讲类上的泛型和参数上的泛型,有哪篇讲到这种情况的
    ntdll
        36
    ntdll  
       Jul 20, 2018   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 五个泛型参数。
    ex1gtnim7d
        37
    ex1gtnim7d  
    OP
       Jul 20, 2018
    @gam2046 万分感谢!
    don2012
        38
    don2012  
       Jul 20, 2018 via Android
    基础不行啊楼主
    kaedea
        39
    kaedea  
       Jul 20, 2018 via Android
    实例泛型方法,比较能理解,因为涉及到继承,还需要考虑到协变和异变的问题...
    kaedea
        40
    kaedea  
       Jul 20, 2018 via Android
    把类型参数换成 Object,然后用个静态泛型方法保护一下比较好
    JohnZorn
        41
    JohnZorn  
       Jul 22, 2018
    但是实例方法的话 不必声明持有泛型吧 似乎静态才需要声明为返回方法 或者说标记持有此泛型
    Trumeet
        42
    Trumeet  
       Jul 25, 2018 via Android
    泛型了解一下?
    About     Help     Advertise     Blog     API     FAQ     Solana     947 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 99ms UTC 21:32 PVG 05:32 LAX 14:32 JFK 17:32
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86