首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Coding
V2EX  ›  Java

Java ,请教一下重载的问题。

  •  
  •   ukipoi · 355 天前 · 1416 次点击
    这是一个创建于 355 天前的主题,其中的信息可能已经有所发展或是发生改变。
    public void demo(Object value){}
    public void demo(List<Objcet> value){}
    

    针对上面这种情况,什么时候会访问 List<Object> 这个参数的接口,或者说怎么访问第二种方式的接口?
    我试了下 List<String> params; ,把 params 传入会进入第一个接口。

    9 回复  |  直到 2018-12-25 17:19:02 +08:00
        1
    crayygy   355 天前 via Android   ♥ 1
    Effective Java 中有提过这个。
    原因是 List 本身也是 Object。

    至于怎么访问,更好做法是不要这么写
        2
    SilentHill   355 天前   ♥ 2
    params 类型改为 List<Object>
    或者 params 类型强转为(List)params
        3
    aaronysj   355 天前
    试了一下,你直接传 params 的话,自然会被当成一个 Object。
    但传入 (List)params 会走一道强制转换,这个过程似乎编译器会认为它是个 List,就会进入第二种方式了,但这样写似乎有些奇怪。
    我试了下 Arrays.asList()这类的方法,也是可以进入第二种方式的,因为此类方法返回值类型限制了。
    但还是同一楼一样,觉得没必要这样写。
        4
    ukipoi   355 天前
    @aaronysj
    嗯,我是在看别人写的 Redis 操作类的时候看到的代码。我发现直接传入会出问题。
    同时我想请教下 JPA MySQL 以及 Redis 在 Spring 下是怎样运作的。
    之前是使用 Mybatis 和 Redis,其实原理也不是很懂。但是好像加上 @Cache 的注解就会进入缓存了。
    那么在使用 JPA 的情况下是需要重写 Repository 里的操作手动的存入 Redis 缓存,还是执行 save 方法的时候会自动缓存呢?或者有其他更好的方法?
        5
    aaronysj   355 天前
    @ukipoi 我是渣渣,问下 google 呢 ///溜了
        6
    letianqiu   355 天前   ♥ 1
    Java 的 Generic 存在 type erasure,所以 List<String>不是 List<Object>的字类。我没记错的话 params 类型写成 List<?>可以
        7
    codechaser   355 天前 via Android
    类型擦除后会都变为 list,这个问题我也不懂,都擦除成了 list<object>,怎么不能用第二种呢?求解释
        8
    yhvictor   355 天前
    Java 中函数调用都是编译时确定的,编译的时候会看哪个更匹配用哪个。
    编译的后就擦除了信息。
    如果编译器不能分辨出应该用哪个,会编译失败。
        9
    feiyuanqiu   355 天前 via Android   ♥ 2
    因为类型擦除,List<String> 不是 List<Object> 的子类,它的父类是 Object,所以调用了第一个方法;要调用第二个方法,要么传入 List<Object>,要么改方法签名。
    https://docs.oracle.com/javase/tutorial/java/generics/inheritance.html

    关于 Overloading,可以看看 R 大在知乎这个回答( ps. R 大的每个回答都值得 Java 开发者一看)
    https://www.zhihu.com/question/50111592/answer/119694222
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4372 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 31ms · UTC 02:52 · PVG 10:52 · LAX 18:52 · JFK 21:52
    ♥ Do have faith in what you're doing.