有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java中未实例化的匿名类

我写Java已经有6年了,所以请原谅我生锈了

我正在使用一个库方法,它要求我传递Class个对象。因为我必须动态调用这个方法很多次,每次使用稍微不同的Class参数,所以我想给它传递一个匿名类

然而,到目前为止,我能找到的所有文档/教程都只涉及实例化匿名类,e.g.

new className(optional argument list){classBody}

new interfaceName(){classBody}

我可以定义一个匿名类而不实例化它吗?或者,也许更清楚地说,我可以为匿名类创建Class对象吗


共 (2) 个答案

  1. # 1 楼答案

    不幸的是,在这里你无法回避实例化。但是,您可以将其设置为“禁止操作”:

    foo((new Object() { ... }).getClass());
    

    当然,如果必须从构造函数中执行某些操作的某个类派生,那么这可能不是一个选项

    编辑

    你的问题还说,你想调用foo“每次都使用稍微不同的类参数”。上面的方法行不通,因为即使将新表达式放入循环中,仍然会有一个匿名内部类定义。因此,与命名类定义相比,它并不会给您带来任何好处。特别是,如果您试图捕获某些局部变量的值,那么foo将使用传递给它的Class对象创建的匿名类的新实例将不会捕获它们

  2. # 2 楼答案

    如果不安装匿名类,则无法访问该类的类对象。但是,如果只需要访问该类,可以在方法中定义本地类,并使用类名引用这些类。类文本语法