当前位置: 首页 > 面试题库 >

Java中的方法参数中的类定义?

濮阳驰
2023-03-14
问题内容

我第一次遇到这种形式的Java代码:

object.methodA(new ISomeName() {
public void someMethod() {
//some code
}
});

其中ISomeName是具有一个方法的接口,该方法的签名与上面的someMethod()相同。

据我了解,我们正在定义一个实现ISomeName的新名称类类,使用默认构造函数创建此类的对象,并将该对象作为参数传递给methodA。

这是正确的吗?

此功能的名称是什么?


问题答案:

它正在创建一个
匿名类


请注意,在匿名类中,您可以从方法的早期代码中引用最终局部变量,包括最终参数:

final String name = getName();

Thread t = new Thread(new Runnable() {
    @Override public void run() {
        System.out.println(name);
    }
});
t.start();

变量的 传递到匿名类的构造函数中。这是一种比较弱的
闭包

形式(由于限制而变弱:仅复制值,这就是变量必须为final的原因)。



 类似资料:
  • 问题内容: 我有一个方法可以说: 正如您所注意到的,我有一个名为align的参数。在此方法内部,我将对值是“左”还是“右”有一些if条件。.将参数设置为String,显然我可以传递任何字符串值..我想知道是否有可能将Enum值用作方法参数,如果是,如何? 以防万一有人想到这个;我考虑过使用布尔值,但我并不喜欢它。首先,如何将true / false与left / right关联?(好的,我可以使用

  • 问题内容: 在C#中,如果希望方法具有不确定数量的参数,则可以使方法签名中的最终参数为a ,以使方法参数看起来像数组,但允许使用该方法的每个人传递尽可能多的该类型的参数如来电者所愿。 我相当确定Java支持类似的行为,但是我不知道如何做到这一点。 问题答案: 在Java中,它称为varargs,其语法看起来像一个常规参数,但类型后面带有省略号(“ …”): vararg参数必须 始终 是方法签名中

  • 问题内容: 我正在尝试获取Java程序的方法参数的值。我正在使用ASM来检测字节码并获取这些值。但是,我遇到了一些麻烦。 这是用于检测代码的visitCode()方法。它在做什么是: 创建一个空数组来存储收集的参数。 对于每个参数,将其值加载到数组中。 将此数组发送到我的代理的OnMethodEntry方法(将在其中使用值)。 。 但是,当该方法显然具有多个参数时,此方法不起作用。 获得的类文件显

  • 问题内容: 您认为可以创建类似的东西吗? 问题答案: 是的你可以。 用法示例:

  • int是byte、short、int、long的默认文字,然后是为什么byte c=15被接受而不进行强制转换,但不接受方法参数。 提前谢谢你。

  • 问题总结:我想传递一个带有类型参数(如