我需要调用以下方法.
void foo(Class<? extends Bar> cls);
Run Code Online (Sandbox Code Playgroud)
对于cls参数,我需要传递一个只覆盖单个方法的类Bar.
我想知道是否有一种方法可以在上面的调用本身中编写我的新类的内联定义,而无需在扩展Bar的单独文件中编写新类.
三种选择:
您可以在要使用此代码的同一个类中创建嵌套类; 不需要新文件
public static void doSomething() {
foo(Baz.class);
}
private static class Baz extends Bar {
// Override a method
}
Run Code Online (Sandbox Code Playgroud)您可以在方法中声明一个命名类:
public static void doSomething() {
class Baz extends Bar {
// Override a method
}
foo(Baz.class);
}
Run Code Online (Sandbox Code Playgroud)
在这样的方法中声明一个类是非常不寻常的,请注意.
您可以使用匿名内部类,但然后调用getClass():
public static void doSomething() {
foo(new Bar() {
// Override a method
}.getClass());
}
Run Code Online (Sandbox Code Playgroud)最后一个选项创建一个匿名内部类的实例,只是为了获取Class对象,这当然不是理想的.
就个人而言,我可能会选择第一个选项.
| 归档时间: |
|
| 查看次数: |
66 次 |
| 最近记录: |