简体   繁体   English

如何将 class 类型作为参数传递给 function?

[英]How to pass class type as an parameter to function?

I have four classes: A, B, C, D. B, C, D extends A. I have a list - List<A> that contains all kinds of objects, and I want to build a function that gets one of the classes as parameter and prints from the list all the objects that belongs to the class.我有四个类:A、B、C、D.B、C、D 扩展 A。我有一个列表 - List<A>包含各种对象,我想构建一个 ZC1C425268E68385D1AB507 类中的一个作为参数并从列表中打印属于 class 的所有对象。

    public static void printElements(List<A> list, Class<? extends A> type) {
        for (A element : list) {
            if (type.isAssignableFrom(element.getClass())) {
                System.out.println(element);
            }
        }
    }

The method isAssignableFrom can be used to determine if the Class received as a parameter is the same class or a superclass of each element of the list. isAssignableFrom方法可用于确定作为参数接收的 Class 是相同的 class 还是列表中每个元素的超类。

The Class<? extends A> Class<? extends A> Class<? extends A> is used to only allow types that are of type A or a subclass that are the type of elements allowed in the list. Class<? extends A>用于仅允许类型为 A 的类型或列表中允许的元素类型的子类。

You could do something like this:你可以这样做:

List<A> list = (...);

public static void print(Class klass) {
  for(A a : list) {
    if(klass.isInstance(a)) {
      System.out.println(a);
    }
  }
}

To use it:要使用它:

print(C.class);

Or或者

C c = new C();

print(c.getClass());

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM