Aiv*_*var 11 java generics language-design type-erasure
"例如,使用Erasure作为泛型的一部分,将函数类型添加到编程语言中要困难得多."
编辑:另一个我遇到类似声明的地方是Brian Goetz 在Lambda Dev邮件列表中的消息,他说当lambdas只是具有语法糖的匿名类时更容易处理:
但我对函数类型的反对并不是我不喜欢函数类型 - 我喜欢函数类型 - 但是函数类型与Java类型系统的现有方面,擦除有很大关系.删除的功能类型是两个世界中最糟糕的.所以我们从设计中删除了它.
谁能解释这些陈述?为什么我需要lambdas的运行时类型信息?
我理解它的方式是,他们认为,由于擦除,使用' 函数类型 ' 的方式会很麻烦,例如C#中的委托,它们只能使用lambda表达式,这只是单个抽象方法类的简化句法.
C#中的代表:
public delegate void DoSomethingDelegate(Object param1, Object param2);
...
//now assign some method to the function type variable (delegate)
DoSomethingDelegate f = DoSomething;
f(new Object(), new Object());
Run Code Online (Sandbox Code Playgroud)
(另一个示例 http://geekswithblogs.net/joycsharp/archive/2008/02/15/simple-c-delegate-sample.aspx)
他们在Project Lambda文档中提出的一个论点:
擦除通用类型,这将暴露开发人员暴露于擦除的其他位置.例如,不可能重载方法m(T-> U)和m(X-> Y),这会令人困惑.
第2节:http: //cr.openjdk.java.net/~briangoetz/lambda/lambda-state-3.html
(最终的lambda表达式语法与上述文档略有不同:http: //mail.openjdk.java.net/pipermail/lambda-dev/2011-September/003936.html)
(x, y) => { System.out.printf("%d + %d = %d%n", x, y, x+y); }
Run Code Online (Sandbox Code Playgroud)
总而言之,我最好的理解是,只有部分语法内容可以实际使用.Neal Gafter最有可能的意思是,无法使用委托将使标准API更难以适应功能样式,而不是javac/JVM更新将更难以完成.
如果有人比我更了解这一点,我会很乐意阅读他的账户.
| 归档时间: |
|
| 查看次数: |
479 次 |
| 最近记录: |