2 回答
TA贡献1780条经验 获得超5个赞
我认为这是泛型的一个令人困惑的选择。
我建议你这样做:
private Dao dao;
private List<Data> getList() {
return this.dao.getDataList();
}
TA贡献1860条经验 获得超8个赞
我猜您必须在实际代码中对 (T) 进行强制转换,如下所示。
private <T> T getList(Dao myDao)
{
T result = (T) myDao.getDataList(); // myDao.getDataList return List<Data>
return result;
}
如果是,代码将编译正常。您将 getList 方法定义为返回类型为 T 的对象。Java 将允许您将某些内容强制转换为 'T',尽管有警告。
因为在方法定义中没有对 T 的约束。它相当于“对象”,即您的方法类似于“ private Object getList(Dao myDao){...}”
在这种情况下,返回值可以是列表或映射或 Object 的任何子类。
基本上,您没有指定“T”代表什么。例如,如果您说“ <T extends List>”,则返回类型必须是列表的子类。
另一种方法可以重新编写该方法,并清楚地了解 T:
private <T extends Object> T getList(Dao myDao)
{
T result = (T) myDao.getDataList();
// Warning Type safety: Unchecked cast from List<Data> to T
return result;
}
添加回答
举报