谁能给我翻译翻译到底什么是 tm 的泛型?!

2015-07-04 20:07:10 +08:00
 ashamp
太抽象的翻译了~
2674 次点击
所在节点    问与答
13 条回复
101
2015-07-04 20:17:59 +08:00
又是个跳入 Java 深坑的孩子,翻译不是很贴切就仿实例写代码就理解了
acros
2015-07-04 20:19:32 +08:00
这个翻译不是挺贴切的吗?是说的Generic吧?
otakustay
2015-07-04 20:33:19 +08:00
一个类可**泛**用于任何(也可以有限制)类**型**,具体使用的类型编译/运行时再确定
crayygy
2015-07-04 20:36:25 +08:00
让我想起一个翻译:鲁棒性
wwqgtxx
2015-07-04 21:33:51 +08:00
@101 c#的泛型同样坑,到你实现一个IEnumable<T>接口的类就知道有多麻烦了
IEnumable<T>继承自不带泛型的IEnumable
所以你要实现一个带泛型一个不带泛型的同名方法,这两个方法还tmd的返回值一个是<T>一个是object,所以还不能直接重载…………
总之都是泪呀,还不如Java的泛型,好用的多
mahone3297
2015-07-04 21:48:08 +08:00
和具体化,相对应的,就是泛化。。。
mouhong
2015-07-04 21:51:06 +08:00
@wwqgtxx 不能直接重载是啥意思?
Septembers
2015-07-04 22:00:00 +08:00
@mouhong 方法签名不匹配
wwqgtxx
2015-07-04 22:38:39 +08:00
@mouhong 你试试能不能这样重载?
public String get() {return "x";}
public int get(){return 0}
mouhong
2015-07-04 23:20:43 +08:00
@wwqgtxx 你的两个 get 返回值不一样,C# 中返回值不是方法签名的一部分,不过为什么是这样,我也不是很清楚,貌似官方的说法是这会使 overload resolution 变得复杂 (就先当他们懒吧T_T)。但实现 IEnumerable<T> 接口你指的应该是返回类型的协变性吧,这个在 C# 中也不支持,究其原因,大概也是因为懒,一种权衡吧,嘿嘿,详情:

http://stackoverflow.com/questions/7996127/the-return-type-of-the-members-on-an-interface-implementation-must-match-exactly/7996843#7996843

http://stackoverflow.com/questions/5709034/does-c-sharp-support-return-type-covariance
dallaslu
2015-07-05 00:05:18 +08:00
「型」指的是类型,比如参数类型、返回值类型。那么「泛」应该怎么解释呢?

域名解析有一个方式叫「泛域名解析」,意思是说所有符合 *.example.com 的子域名比如 v2ex-demo.example.com 都可以根据这条规则解析到同一个 IP 上。好处很明显,当有一天你要在这个服务器上加一个站点 java-ashmp.example.com 时,就不用再修改解析规则了。

回到 Java,「泛型」的好处也很明显,当你在程序的「运行时」需要动态指定类中方法的参数或返回值类型时,直接在调用者代码里写就行了——而不用再修改那个支持泛型的类了。
Smilecc
2015-07-05 09:02:30 +08:00
我一直觉得这翻译挺好的啊。。
tanywei
2015-07-05 10:52:58 +08:00
还是喜欢python的数据结构

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/203338

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX