假设我有一个抽象类:
public abstract class Car {
}
上述类的内部类扩展:
public class Foo {
public static final class BMW extends Car {
public final Foo foo = new Foo("foo");
}
}
如何创建接受类BMW
的方法?
我目前的方法:
void listInstances(final Class<Car> clazz) {}
给出了这个错误:
incompatible types: Class<Foo.BMW> cannot be converted to Class<Car>
我称之为:
listInstances(Foo.BMW.class);
答案 0 :(得分:2)
支柱是正确的......
void listInstances(Class<Car>)
...必须接受Car类对象而只接受Car类对象。可替换地...
void listInstances(Class<? extends Car>);
可以为扩展Car(包括Car)的类接受任何Class对象。
奇怪的是(基于方法的名称)没有返回值。通常,当方法具有这样的名称时,我会看到类似的内容:
<T extends Car> List<T> listInstances(Class<T> type);
这可以保证返回类型与输入类型匹配。