将内联构造的类作为Class参数传递给方法

时间:2015-04-29 05:38:07

标签: java

我需要调用以下方法。

void foo(Class<? extends Bar> cls);

对于cls参数,我需要传递一个只覆盖Bar的单个方法的类。

我想知道是否有办法在上面的调用中编写我的新类的内联定义,而无需在扩展Bar的单独文件中编写新类。

2 个答案:

答案 0 :(得分:5)

三个选项:

  • 您可以在要使用此代码的同一个类中创建嵌套类;不需要新文件

    public static void doSomething() {
        foo(Baz.class);
    }
    
    private static class Baz extends Bar {
        // Override a method
    }
    
  • 您可以在方法中声明一个命名类:

    public static void doSomething() {
        class Baz extends Bar {
            // Override a method
        }
        foo(Baz.class);
    }
    

    在这样的方法中声明一个类是非常不寻常的,请注意。

  • 您可以使用匿名内部类,但然后调用getClass()

    public static void doSomething() {
        foo(new Bar() {
            // Override a method
        }.getClass());
    }
    

最后一个选项创建一个匿名内部类的实例以获取Class对象,当然这不是理想的。

我个人可能选择第一个选项。

答案 1 :(得分:2)

是的,您可以简单地声明一个匿名类并在其上使用getClass()方法:

foo(new Bar() {
    //implement your method here
}.getClass());