【问题标题】:Passing parameter information with { }使用 { } 传递参数信息
【发布时间】:2014-07-21 09:31:11
【问题描述】:

所以你可以用<> 做泛型类型,你可以用() 传递对象。但是当你用{}传递信息时,它叫什么,就像这个例子一样?

new Filter<CLDevice>() {
    public boolean accept(CLDevice device) {
        CLDeviceCapabilities caps = CLCapabilities.getDeviceCapabilities(device);
        return caps.CL_KHR_gl_sharing;
    }
}

这是否仅适用于构造函数,或者任何方法都可以使用{} 来收集数据?

是否有任何与此类代码相关的注意事项,例如它是否性能不佳?

【问题讨论】:

  • &lt;&gt;(){} 完全不相关——它们不是“信息传递”概念或任何东西的实例。
  • 您的示例仅显示了anonymous class。请注意,{} 用于各种场景:类声明、块代码声明(方法、循环等)以及数组初始化程序。
  • 如果您想要概念的名称,那么在您的示例中,您使用的是匿名类。这是关于使用它们的question。通常,在 {} 中,您将实现一些与类相关的方法(此处为Filter)。

标签: java interface anonymous-class


【解决方案1】:

您所展示的实际上并不是传递信息(例如将参数传递给方法),而是传递行为。

因为在 Java 7 之前不存在 lambda,为了传递行为,您总是需要一个类(毕竟在 Java 世界中一切都是一个类)。您显示的语法是匿名内部类的语法。当您不需要/不想创建新的类文件但只需要传递一些行为时,此语法用作快捷方式。

请注意,如果您必须实现(行为传递)多个方法,则可以轻松使用相同的语法 - 这是 Java 8 lambda 无法做到的。

【讨论】:

    【解决方案2】:

    在这种情况下,您通过匿名类为Single Abstract Method (SAM) 接口或功能接口提供实现。

    【讨论】:

      【解决方案3】:

      在 java {} 中定义范围。范围有多种类型,例如类、方法、块。

      在您的示例中,您正在创建一个anonymous class

      【讨论】:

        【解决方案4】:
        So you can do generic types with <>.
        
        You can pass objects with ().
        
        What is it called when you pass information with {}, as in this example
        

        使用 {},您可以创建方法体或匿名类/方法/对象。这里您的代码定义了一个匿名方法。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-07-15
          • 1970-01-01
          • 1970-01-01
          • 2016-03-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多