【问题标题】:What does it mean in java? Where I can obtain more info?在java中是什么意思?我在哪里可以获得更多信息?
【发布时间】:2011-04-18 04:09:16
【问题描述】:

对于这个愚蠢的问题,我很抱歉,但我是 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 表达式”有关,是一样的吗?

【问题讨论】:

    标签: java android


    【解决方案1】:

    那是一个匿名的内部类。你可以用它来代替这段代码:

    btvisualizar.setOnClickListener(new MyClickListener());
    

    这里是 ClickListener 类:

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

    【讨论】:

      【解决方案2】:

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

      您认为这与 C# lambda 表达式有关的直觉是相当准确的。尽管 Java 还没有 lambda,但您可以通过使用“应用”方法创建一个对象并传递对它的引用来模拟一个。这种技术用于 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)  
        }  
      } 
      

      您创建一个新的F,而不是View.OnClickListener,它有一个名为f 的apply 方法而不是onClick()。

      另见Functional Programming in Java

      【讨论】:

      【解决方案3】:

      OnClickListener?我假设每当用户单击可视化器时,传递的匿名类实例中的onClick 就会被调用,并传入可视化器视图实例。

      【讨论】:

        【解决方案4】:

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            猜你喜欢
            • 2010-10-23
            • 1970-01-01
            • 2011-06-09
            • 1970-01-01
            • 2011-04-14
            • 1970-01-01
            • 2011-04-15
            • 1970-01-01
            • 2012-07-07
            相关资源
            最近更新 更多