【发布时间】:2017-05-11 20:22:35
【问题描述】:
我有一个 java 方法,我正在尝试使其成为通用方法,以便它可以将 2 种不同类型的对象的列表作为参数。 (如下所示的简单示例)。这两个不同的对象都将始终具有 getDate() 和 getHour() 方法。代码如下所示:
public <T> List<T> getListOfStuff(List<T> statistics) {
List<T> resultList = new ArrayList<T>(statistics.size());
if(statistics.size() > 0){
resultList.add(statistics.get(0));
int date = Integer.parseInt(resultList.get(0).getDate());
int hour = Integer.parseInt(resultList.get(0).getHour());
}
return resultList;
}
但是这不起作用。这两行不起作用:
int date = Integer.parseInt(resultList.get(0).getDate());
int hour = Integer.parseInt(resultList.get(0).getHour());
错误说: “类型 T 的方法 getDate() 未定义”和 “类型 T 的方法 getHour() 未定义”
它建议我向方法接收器添加强制转换,但它不允许我使用 T 而是像这样将对象名称强加给我,这对我不起作用:
int date = Integer.parseInt((ObjectName1)resultList.get(0).getDate());
int hour = Integer.parseInt((ObjectName1)resultList.get(0).getHour());
有什么方法可以在这里做我想做的事吗?
【问题讨论】:
-
这是因为你不能只创建一个界面吗?
-
这两种不同的类型有共同的祖先吗?即基类或接口
-
更准确地说,这些方法是从一个共同的祖先继承吗?
-
ObjectName1是什么?它是您提到的两种类型的共同祖先,还是具有getDate和getHour方法的类型之一? -
@DaveNewton 是的
标签: java oop generics methods generic-collections