我已经阅读了很多关于java中的通用概念。我已经有了一些疑问,已经通过 StackOverflow 的精确答案得到了解答。
我不认为此前已经提出过这个问题 我搜索了很多。 但是,我无处可回答这个问题,
所有事情发生的方式和方式 通用程序(在java中)在 (a)编制时间
(b)运行时执行。喜欢......
步骤明智的是什么? 编译器存储泛型的位置 信息等...
任何人都可以用示例代码向我解释一下吗?
感谢。
编辑:我知道类型擦除的一些概念,删除了所有通用信息,但我不知道通用程序的所有步骤。
答案 0 :(得分:4)
阅读Angelika Langer FAQ About Generics,您很可能会在那里找到所有问题的答案。
这本书The Java Programming Language 4th Edition包含了关于这个主题的好章节。
当然,没有比你可以免费获得的Java Language Specification更好的参考。
如果你真的打算那么深入,那本书Java Generics and Collections也是一本关于这个主题的非常好的书。我发现了这本书here的PDF版本。不幸的是它只包含几页。
答案 1 :(得分:0)
如果你使用.Net和Java,那么http://jorudolph.wordpress.com/2010/04/21/net-generics-implementation/提供了一个比较&对比观点。
http://www.codeproject.com/KB/java/GenericsInJavaPartII.aspx是示例代码的解释,显示了实现的含义。
简要说明......
A部分:
编译器清除(“擦除”)通用位(因此ArrayList变为ArrayList)。然后,当一个对象被拉出集合(例如,al.get(0))时,编译器会插入转换数据类型的代码(又名“装箱”)(将al.get(0)转换为(StackExchange)) al.get(0))。
B部分:
没有B部分。:)
Z部分:
Java中的泛型是在语言首次发布后大约十年实现的。因此,可能以向后兼容的名义,Java中的泛型仅作为语法糖。语法糖是一种奇特的方式,可以说“你可以自己编写这段代码,但编译器允许你输入一个快捷方式。”例如,在泛型出现在Java之前,您可以编写(StackExchange)al.get(0)。如果您使用泛型,编译器只会为您插入代码。