V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  WangYanjie  ›  全部回复第 1 页 / 共 8 页
回复总数  143
1  2  3  4  5  6  7  8  
2019-01-16 22:28:04 +08:00
回复了 beijiaxu 创建的主题 Java jdk8 lambda 表达式推断问题
@WangYanjie
类型转换
3 Collection 是 raw type, 不参与 type erasure

一种猜想是 type ensure 的过程中加了 type cast,
一种猜想是 type ensure 的过程中加了 bridge method.

我倾向与后者
当使用 Collection 时,lambda 编译时对应的是 A
interface Consumer<T> {
accept(T o)
}
class A implements Consumer {
accept(Object o) {}
}
编译后
interface Consume {
accept(Object o)
}
class A implements Consumer {
accept(Object o) {}
}

当使用 Collection<String> 时,lambda 编译时对应的是 A
class Consumer<T> {
accept(Object o)
}
class A implements Consumer<String> {
accept(String o) {}
}
编译后会增加 i 一个 bridge method
class Consumer {
accept(Object o)
}
class A implements Consumer<String> {
accept(String o) {}
accept(Object o) {this.accept((String) o)}
}

主要的信息来源是 Java Generic FAQs: http://www.angelikalanger.com/GenericsFAQ/FAQSections/TechnicalDetails.html#FAQ102

从头阅读风味更佳
2019-01-16 21:55:09 +08:00
回复了 beijiaxu 创建的主题 Java jdk8 lambda 表达式推断问题
@beijiaxu 看错题了,尴尬

我理解的,明天去学习下能不能看到编译后的代码的
1 泛型在编译期间会有 type erasure 的过程,会导致 Collection<String> 等价于 Collection<Object>,
2 在 type erasure 的过程中,编译器会按需要自动加上
2019-01-15 23:33:09 +08:00
回复了 beijiaxu 创建的主题 Java jdk8 lambda 表达式推断问题
interface Collection<?>{} 是 generic type.

Collection<String> 是 parameterized type, an instance of generic type `Collection`
Collection 是 raw type, java 5 之前的产物
Collection<?> 是 unbound wildcard parameterized type
type erasure 的 **一部分** 是指编译器会在编译期间,把 parameterized type 中的 type parameter 都消去,
Collection<String>, Collection, Collection<?> 应该都是对应的一种运行时的类

尝试了以下并没有你这样的效果。

import java.util.*;

public class Demo {
public static List<String> methodA(Collection<String> cs) {
List<String> stringList = new ArrayList<>();
for (String s : cs) {
stringList.add(s);
}
return stringList;
}

public static void main(String args[]) {
Map<String, Object> map = new HashMap<>();
List<String> stringList = new ArrayList<>();
stringList.add("s");
map.put("A", stringList);
methodA((Collection) map.get("A")).stream().forEach(p -> System.out.println(p.getClass()));
methodA((Collection<String>) map.get("A")).stream().forEach(p -> System.out.println(p.getClass()));
}
}


class java.lang.String
class java.lang.String

➜ ~ java -version
java version "1.8.0_181"
Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)
java 是怎么处理泛型的?
2018-04-08 15:39:19 +08:00
回复了 denggj28 创建的主题 Go 编程语言 关于 YouCompleteMe 的 golang 代码提示
@bolide2005 第一 用 IDE 还是 vim,其实本质上是看你想要 IDE/vim 提供什么。第二 从我的经验来说 vim 并不落后。
我更好奇,过程中是如何保证重构代码的功能正确性的?
1 到底是不是 bug,最好再确认下
2 解不解决,看你自己的选择,谨记一点,如果要做事,务必让大家都看到你的成果,不要做了好事还不留名
@lolizeppelin 不赞同你的看法,我认为是:
If you want to simply access a global variable you just use its name. However to change its value you need to use the global keyword.
不要 retry_time -= 1
2017-10-01 19:27:43 +08:00
回复了 banpotinke 创建的主题 职场话题 月光族是一种什么感觉?
背景补充:年轻力壮基本不生病,没女朋友,爸妈还不用自己养
好处:生活基本随心;有挣钱的动力
坏处:不敢随意辞职,在意年终了
2017-09-12 13:25:53 +08:00
回复了 sensui7 创建的主题 Python js 党可以吐槽一下 Python 吗
没怎么用过 js,所以不太好评论,不过你的 python 写的真入门

```
[x * 2 for x in x in arr]
```
2017-09-07 23:58:01 +08:00
回复了 zy65334 创建的主题 问与答 有多少在外漂泊的人过生日的时候独自在房间过?
生日快乐
2017-08-30 18:55:42 +08:00
回复了 nanpuyue 创建的主题 全球工单系统 淘宝外卖/饿了么 腻害了,你就慢慢等去吧
大佬,不好意思了
2017-08-30 10:29:53 +08:00
回复了 keisuu 创建的主题 Python Python 爬虫学习路线
这 b 的水平低的几乎令人发指,我知道这么说不太好
2017-08-26 19:45:47 +08:00
回复了 sdjl 创建的主题 Python Python 中如何实现 a.xxx 返回 a 本身?
```
>>> class A(object):
... @property
... def xxx(self):
... return self
...
>>> a = A()
>>> a
<__main__.A object at 0x10e8809d0>
>>> a.xxx
<__main__.A object at 0x10e8809d0>
```
2017-08-23 21:06:47 +08:00
回复了 gclove 创建的主题 Python 大家是用 Gunicorn 还是 uwsgi 的 ?
Gunicorn
2017-08-17 10:47:53 +08:00
回复了 beyoung 创建的主题 程序员 妹子 你不懂装懂的样子真可爱
v2 能加个举报功能
写了 bug 还不让当中说喽?单元测试是笑话了?
1  2  3  4  5  6  7  8  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2639 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 32ms · UTC 11:00 · PVG 19:00 · LAX 03:00 · JFK 06:00
Developed with CodeLauncher
♥ Do have faith in what you're doing.