从我写Java到现在已经有6年了,所以请原谅。

我正在使用需要将Class对象传递给它的库方法。由于我必须动态地多次调用此方法,因此每次都要使用略有不同的Class参数,因此我想将其传递给一个匿名类。

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

new className(optional argument list){classBody}

new interfaceName(){classBody}

是否可以在不实例化的情况下定义匿名类?或者,也许更清楚地讲,我可以为匿名类创建Class对象吗?

最佳答案

不幸的是,您无法避开此处的实例化。您可以将其设为无操作,但是:

foo((new Object() { ... }).getClass());
当然,如果您必须派生自某些在构造函数中执行某些操作的类,则这可能不是一个选择。
编辑
您的问题还说您想“每次用稍微不同的Class参数调用foo”。上面的代码不会这样做,因为即使将new-expression放入循环中,仍然会有一个匿名的内部类定义。因此,与命名类定义相比,它实际上不会给您带来任何好处。特别是,如果您试图捕获某些局部变量的值,则foo将使用传递给它的Class对象创建的匿名类的新实例将不会捕获它们。

07-26 06:28