有什么方法可以在运行时创建泛型的特定实例?
例如。
Cacheable instance = getCacheable(someInput);
getCacheble方法将向我返回Cacheable的实例。因此它可以是任何实现Cacheable的类。客户,产品等。现在我要创建一个由getCacheable返回的特定类型的列表,如下所示。如果是,该怎么做?
List<? extends Cacheable> cacheList = new ArrayList<>();
我想基于getCacheable方法返回的实例创建
ArrayList<Product> or ArrayList<Customer>
。 最佳答案
你可以这样做:
Cacheable instance = getCacheable(someInput);
List<? extends Cacheable> l = new ArrayList<>();
l = Collections.checkedList(l, instance.getClass());
由于类型擦除,所有在编译时可访问的信息都会在运行时丢失。
checkedList
方法将确保您的列表仅接收instance
变量类的实例。更新:
您还可以执行以下操作:
public static <T extends Cacheable> MyOwnCustomGeneric<T> createMyOwnCustomGeneric(Class<T> type) {
return new MyOwnCustomGeneric<T>();
}
// ...
IMyOwnCustomGeneric foo = createMyOwnCustomGeneric(instance.getClass());