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