我需要调用以下方法。
void foo(Class<? extends Bar> cls);
对于cls
参数,我需要传递一个只覆盖Bar
的单个方法的类。
我想知道是否有办法在上面的调用中编写我的新类的内联定义,而无需在扩展Bar的单独文件中编写新类。
答案 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());