Java闭包类型、变量、数组和集合
Java闭包规范的当前状态是什么Java闭包类型、变量、数组和集合,java,garbage-collection,closures,Java,Garbage Collection,Closures,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 aca
如果是,这种语法可能吗
{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);
}
我们是否可以执行以下操作,有效地声明对方法的最终/常量引用
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
};
}
接口闭合
{
公共类Asdf
{
静态公共布尔gt(整数x,整数y){
返回x>y;
}
静态公共布尔lt(整数x,整数y){
返回x布尔b}[]比较开关={
Asdf.gt、Asdf.lt、Asdf.eq
};
}
请您关注问题的要点,而不是示例代码中的任何语法错误/拼写错误/缺少关键字。任何拼写错误/错误,请为我更正。谢谢。JDK7中的闭包目前缺少详细信息。在Devxx的演示中,使用的示例与 假设JDK7中使用了规范,那么我认为您的问题的第2、3和4部分的答案是肯定的(尽管我很可能是错的) 对于第1部分-我认为应该可以有数组,因为方法文本可以分配给方法对象 对于第5部分,我怀疑性能与内部类类似
抱歉,我说得有点含糊-我希望这有点帮助。肯定地回答您的问题可能还为时尚早。您询问的是JDK7闭包的工作,因此对的引用不相关。该网站是关于现已完成的openjdk闭包项目,该项目展示了如何在Java中添加透明闭包满足田纳西对应原理的意义,在中作了粗略的描述 JKD7的工作是根据规范组织的。规范正在快速发展,因此任何答案都是暂时的。正如Tom Hawtin指出的 在回答您的具体问题之前,值得注意的是Java对变量和方法有单独的名称空间。因此,调用方法和调用函数类型的变量(用C#的说法,是委托)之间可能存在一些语法上的区别。类似地,您不太可能仅通过命名来引用方法,就像您引用字段一样 回答您的问题:
java.util.List
而不是数组可以实现相同的效果。考虑到separate正在考虑为List
添加集合
文本和索引操作,这在语法上可能同样方便如果你们中的任何人有点太不耐烦了,不想以“不是真正的问题”来结束这个问题,请阅读我的自我评论:这不是家庭作业。50岁的古代程序员需要一些真诚的帮助才能做出一些战略决策。这是关于Neal Gafter的闭包建议的问题,还是关于Lambda的问题?当前的Lambda:Java语言规范草案0.1版本0.2正在准备中yntax类似于FCM(它使用散列字符)。实际的提案非常不同。
// 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));
}
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
};
}