我很抱歉这个愚蠢的问题,但我是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表达式”有关,是同样的事情吗?
答案 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()
的应用方法。
答案 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
}
});