将摘要 类 存储在数组列表中

Store abstract classes in an array list

我想将扩展抽象 class 的多个 class 对象的 class 对象存储在数组列表中。请注意,我必须使用抽象 class 而没有界面,因为 class 国家/地区将包含更多功能。

想法是稍后访问此 class 对象,创建它们的对象并调用方法。

问题:请问如何实现,因为下面的代码会产生错误。

import java.util.ArrayList;

public class Main
{
    public static void main(String args[]) {
        new Main();
    }

    public Main() {
        // The idea is to add the class of all specific countries to the countries array
        ArrayList<Class<Country>> countryclasses = new ArrayList<Class<Country>>();

        // Doesn't work
        countryclasses.add(England.class);

        // Doesn't work
        Class<Country> englandclass = England.class; // Error
        countryclasses.add(englandclass);

        // Doesn't work
        England england = new England();
        Class<Country> country = england.getClass().getSuperclass().getClass();
        // Class<Country> country = england.getClass().getSuperclass().getClass();
        countryclasses.add(country);

        for(Class<Country> countryclass : countryclasses) {
            // Create an object from the class
            // Call the getName() method
        }
    }

    public abstract class Country {
        abstract String getName();
    }

    public class England extends Country {
        public String getName() {
            return "England";
        }
    }
}

如果您真的想要 List<Class> 而不是使用实例的多态集合,您可以使用 upper-bounded wildcard 来定义 类,这将是 Country或扩展它:

List<Class<? extends Country>> countryclasses = new ArrayList<Class<? extends Country>>();
Class<? extends Country> englandclass = England.class;
countryclasses.add(englandclass);