![]() |
1
149
streloksi's link 在消除分歧方面做得很好。不过,快速而肮脏的总结是… 在语法和用法方面。语言之间的语法大致相同。偶尔会有一些怪癖(尤其是在限制条件下)。但基本上,如果你能阅读其中一个,你就可以阅读/使用另一个。 但最大的区别在于实现。 Java使用类型擦除的概念来实现泛型。简而言之,底层编译类实际上不是通用类。它们编译成对象并强制转换。实际上,Java泛型是编译时工件,并且可以在运行时很容易地被颠覆。 另一方面,借助clr,实现泛型,一直到字节代码。为了支持2.0中的泛型,clr进行了一些破坏性的更改。其优点是性能改进、深层次安全验证和反思。 再次提供 link 有一个更深入的分解我鼓励你阅读 |
![]() |
2
31
区别在于微软和Sun的设计决策。 Generics in Java 是通过 type erasure 通过编译器,这意味着类型检查在编译时发生,并且类型信息被删除。采用这种方法是为了保持遗留代码与使用泛型的新代码兼容: 从Java教程中, Generics: Type Erasure :
然而,随着 generics in C# (.NET) ,编译器不清除类型,类型检查在运行时执行。这样做的好处是类型信息保存在编译后的代码中。 维基百科:
与其说“.NET泛型比Java泛型好”,不如看一下实现泛型的方法的不同之处。在Java中,保持兼容性是一个很高的优先级,而在.NET中(当在版本2中介绍时),实现使用泛型的全部好处是一个更高的优先级。 |
![]() |
3
5
还发现 this 与安德斯·海斯伯格的谈话可能也很有趣。为了总结安德斯·赫杰斯伯格(Anders Hejlsberg)在附加说明中提出的观点: Java泛型与现有JVM的最大兼容性 这与在C中看到的实现相比,导致了一些奇怪的事情:
但是+1代表与乔纳森·普赖尔有关的答案 blog post . |
![]() |
ridiculous_fish · std::是否保证短路? 3 年前 |
![]() |
Hilde Schneider · php对我的if条件有问题 7 年前 |
![]() |
user8188120 · 熊猫用np标记时间戳。其中比较 7 年前 |
|
Jarek · 与循环python数据帧中的下一个/上一个值进行比较 7 年前 |
|
vato · Bash脚本:测试浮点数是否在包括负数在内的特定范围内 7 年前 |