Ble*_*eek 11 java closures garbage-collection
Java闭包的当前规范是什么?
在提议的Java闭包规范中,我们能够创建一个数组或闭包集合吗?
如果是这样,这种语法是否可行?
{int x, int y => boolean b}[] comparisonSwitch = {
{int i, int j => return i>j},
{int i, int j => return j<i},
{int i, int j => return j==i}
}
boolean compare(int acase, int a, int b){
return comparisonSwitch[acase].invoke(a,b);
}
Run Code Online (Sandbox Code Playgroud)普通方法会被视为非匿名闭包吗?
那么以下语法是否可行?
public class Asdf
{
public boolean gt(int x, int y){
return x>y;
}
public boolean lt(int x, int y){
return x<y;
}
public boolean eq(int x, int y){
return x==y;
}
{int x, int y => boolean b} GT = gt;
{int x, int y => boolean b}[] comparisonSwitch = {
gt, lt, eq
}
}
Run Code Online (Sandbox Code Playgroud)即,闭包和方法是否可以互换?
是否允许以下语法?
// declare a method that has a closure type as an argument
void closurator( {String s => int a} findlen ){
// do whatever
}
String s = "hello";
void useClosurator(){
// invoke the method by supplying a non-anonymous method
// of an object
closurator(s.indexOf(String ss));
}
Run Code Online (Sandbox Code Playgroud)我们如何能够在接口中指定闭包类型?
我们能否做到以下几点,有效地声明对方法的最终/常量引用.
interface Closuration
{
public class Asdf
{
static public boolean gt(int x, int y){
return x>y;
}
static public boolean lt(int x, int y){
return x<y;
}
static public boolean eq(int x, int y){
return x==y;
}
}
{int x, int y => boolean b}[] comparisonSwitch = {
Asdf.gt, Asdf.lt, Asdf.eq
};
}
Run Code Online (Sandbox Code Playgroud)由于闭包会访问代码空间,就像反射一样,使用闭包会降低程序的性能吗?如果不是,这意味着,通过借用"封闭技术"的进步来加速反思吗?
插入新问题:实际上,闭包代码是代码空间的一部分还是变量堆中的一部分,因为我预测闭包代码很容易被垃圾收集擦掉,对吧?
我可以请求您关注问题的要点,而不是示例代码中的任何语法错误/拼写错误/缺失关键字.任何错别字/错误,请为我纠正.谢谢.
Nea*_*ter 12
您询问JDK7闭包是否有效,因此对javac.info的引用无关紧要.该网站是关于现已完成的openjdk闭包项目,该项目展示了如何向Java 添加透明闭包 - 在满足Tennent的通信原则的意义上的透明度,并在我的博客中大致描述.
JKD7的工作是在openjdk lambda项目下组织的.规范正在快速发展,所以任何答案都是试探性的.正如Tom Hawtin所指出的,这是最新的草案规范.
在回答您的具体问题之前,值得观察的是Java具有用于变量和方法的单独命名空间.因此,在调用方法和调用函数类型的变量(在C#parlance中,委托)之间可能存在一些语法上的区别.同样,您不太可能通过命名方法来引用方法,就像引用字段一样.
回答你的问题:
java.util.List而不是使用数组来实现相同的效果.鉴于Coin正在考虑单独的项目添加Collection文字和索引操作List,它可能在语法上方便.| 归档时间: |
|
| 查看次数: |
1088 次 |
| 最近记录: |