将摘要 类 存储在数组列表中
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);
我想将扩展抽象 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);