Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
它在java中是什么意思?我在哪里可以获得更多信息?_Java_Android - Fatal编程技术网

它在java中是什么意思?我在哪里可以获得更多信息?

它在java中是什么意思?我在哪里可以获得更多信息?,java,android,Java,Android,对于这个愚蠢的问题,我很抱歉,但我是Java新手,我想知道这个语法是什么意思,以及在哪里可以获得有关它的更多信息: (...) //I would like to know what does this syntax mean btvisualizar.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { // some cod

对于这个愚蠢的问题,我很抱歉,但我是Java新手,我想知道这个语法是什么意思,以及在哪里可以获得有关它的更多信息:

    (...)
    //I would like to know what does this syntax mean
    btvisualizar.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {   
           // some code here               
        }
    });
    (...)
我是从这个话题上得到的:


我认为它与C#中的“lambda表达式”有关,这是同一回事吗?

它被称为匿名内部类。请参阅属于匿名内部类的

。您可以使用它来代替此代码:

btvisualizar.setOnClickListener(new MyClickListener());
在这里单击Listener类:

public class MyClickListener implements View.OnClickListener {
        public void onClick(View v) {   
           // some code here               
        }
}

OnClickListener
?我假设只要用户单击visualiser,传入visualiser视图实例,就会调用传递的匿名类实例中的
onClick

正如其他人所指出的,这是一个匿名内部类。它是创建View.OnClickListener新子类的语法速记,该子类用您想要的行为重写onClick()方法

你的直觉认为这与C#lambda表达式有关,这是相当准确的。尽管Java还没有lambdas,但您可以通过使用“apply”方法创建对象并传递对它的引用来模拟lambdas。此技术用于Java函数式编程库。下面是一个例子:

导入fj.F;
导入fj.data.Array;
导入静态fj.data.Array.Array;
导入静态fj.data.List.fromString;
导入静态fj.function.Characters.isLowerCase;
公共最终类数组_存在{
公共静态void main(最终字符串[]args){
最终数组a=数组(“你好”、“那里”、“什么”、“天”、“是”、“它”);
最终布尔值b=a.exists(新的F(){
公共布尔值f(最终字符串s){
从string.forall返回(小写);
}  
});  
System.out.println(b);//true(“what”提供了唯一的示例;请尝试删除它)
}  
} 
您可以创建一个新的
F
,它有一个名为
F
的apply方法,而不是
onClick()


另请参见

我不是java专业人士,但我要用易于理解的术语将其分解:

我假设btvisualizar是代码中的一个可点击对象,比如一个按钮,并且您已经将它映射到了一个按钮或者布局中的任何东西

btvisualizar.setOnClickListener(new View.OnClickListener() {
   //This is basically telling the compiler that you want to make btvisualizar, when clicked on, do something, which you will tell it what to do below.
public void onClick(View v) { 
    //This begins the OnClick statement, anything you put between { and } here is your code as for what to do when clicked on              
    }
});

@克莱顿,不客气!功能性Java站点既有Java 1.5示例(),也有使用Java 7 BGGA闭包方案()的示例。
btvisualizar.setOnClickListener(new View.OnClickListener() {
   //This is basically telling the compiler that you want to make btvisualizar, when clicked on, do something, which you will tell it what to do below.
public void onClick(View v) { 
    //This begins the OnClick statement, anything you put between { and } here is your code as for what to do when clicked on              
    }
});