将接口列表转换为具体类型列表

时间:2014-08-29 15:36:33

标签: java generics

我有一个方法可以从db获取一些对象:

public <T extends Persistable> List<T> getAllEntitiesEager(
        Class clazz, String sortField, SortOrder sortOrder,
        Map<String, Object> filters, boolean invalidate);

此方法返回类型clazz中的对象列表。返回的所有对象都实现了接口Persistable。现在我需要一个具体类型列表。这甚至可能吗?

示例:

班级UserEntity实施Persistable,我想做类似的事情:

List<UserEntity> userList = (List<UserEntity) 
        someObject.getAllEntitiesEager(UserEntity.class,...)

4 个答案:

答案 0 :(得分:6)

为什么不将clazz的类型更改为Class<T>

public <T extends Persistable> List<T> getAllEntitiesEager(Class<T> clazz, 
                            String sortField, SortOrder sortOrder, 
                            Map<String, Object> filters, boolean invalidate);

这样,返回的列表将与您传递clazz类型的类型相同。

答案 1 :(得分:1)

您的方法签名应该声明泛型类类型Class<T> clazz,以便返回的List将来自相同的类类型:

public <T extends Persistable> List<T> getAllEntitiesEager(Class<T> clazz, String sortField, SortOrder sortOrder, Map<String, Object> filters, boolean invalidate);

这是可行的:)

答案 2 :(得分:0)

使用此类代码。

List<? extends yourParentClass> 

答案 3 :(得分:0)

如果您将Class clazz更改为Class<T> clazz,我认为您可以通过自动装箱执行此操作...我没有开发环境来测试此抱歉