【问题标题】:How to pass class type as an parameter to function?如何将类类型作为参数传递给函数?
【发布时间】:2020-04-28 22:13:34
【问题描述】:
我有四个班级:A、B、C、D。
B、C、D 扩展 A。
我有一个列表 - List<A> 包含各种对象,我想构建一个函数,该函数将其中一个类作为参数并从列表中打印属于该类的所有对象。
【问题讨论】:
标签:
java
class
oop
polymorphism
【解决方案1】:
public static void printElements(List<A> list, Class<? extends A> type) {
for (A element : list) {
if (type.isAssignableFrom(element.getClass())) {
System.out.println(element);
}
}
}
isAssignableFrom 方法可用于确定作为参数接收的 Class 是同一类还是列表中每个元素的超类。
Class<? extends A> 用于仅允许 A 类型的类型或列表中允许的元素类型的子类。
【解决方案2】:
你可以这样做:
List<A> list = (...);
public static void print(Class klass) {
for(A a : list) {
if(klass.isInstance(a)) {
System.out.println(a);
}
}
}
使用它:
print(C.class);
或者
C c = new C();
print(c.getClass());