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

时间:2011-04-17 18:57:38

标签: java android

我很抱歉这个愚蠢的问题,但我是Java的新手,我想知道这种语法意味着什么,以及我可以从哪里获得更多相关信息:

    (...)
    //I would like to know what does this syntax mean
    btvisualizar.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {   
           // some code here               
        }
    });
    (...)

我从这个主题得到了它:http://www.portalandroid.org/comunidade/viewtopic.php?f=2&t=9673

我认为这与我们在C#中使用的“lambda表达式”有关,是同样的事情吗?

5 个答案:

答案 0 :(得分:5)

这是一个匿名的内部类。您可以使用它代替此代码:

btvisualizar.setOnClickListener(new MyClickListener());

这里是ClickListener类:

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

答案 1 :(得分:3)

正如其他人指出的那样,这是一个匿名的内部阶级。它是一种语法简写,它创建了一个View.OnClickListener的新子类,它可以用你想要的行为覆盖onClick()方法。

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

import fj.F;  
import fj.data.Array;  
import static fj.data.Array.array;  
import static fj.data.List.fromString;  
import static fj.function.Characters.isLowerCase;  

public final class Array_exists {  
  public static void main(final String[] args) {  
    final Array<String> a = array("Hello", "There", "what", "DAY", "iS", "iT");  
    final boolean b = a.exists(new F<String, Boolean>() {  
      public Boolean f(final String s) {  
        return fromString(s).forall(isLowerCase);  
      }  
    });  
    System.out.println(b); // true ("what" provides the only example; try removing it)  
  }  
} 

而不是View.OnClickListener您创建了一个新的F,其中有一个名为f而非onClick()的应用方法。

另见Functional Programming in Java

答案 2 :(得分:1)

答案 3 :(得分:1)

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

答案 4 :(得分:0)

我不是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              
    }
});