有什么方法可以在运行时创建泛型的特定实例?

例如。

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());

10-08 13:08