Sta*_*man 2 java oop generics methods generic-collections
我有一个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;
}
Run Code Online (Sandbox Code Playgroud)
但这不起作用.这两行不起作用:
int date = Integer.parseInt(resultList.get(0).getDate());
int hour = Integer.parseInt(resultList.get(0).getHour());
Run Code Online (Sandbox Code Playgroud)
错误说:"方法getDate()未定义类型T"和"方法getHour()未定义类型T"
它向我提出了向方法接收器添加强制转换的建议,但它不会让我使用T而是强制对象名称对我这样对我不起作用:
int date = Integer.parseInt((ObjectName1)resultList.get(0).getDate());
int hour = Integer.parseInt((ObjectName1)resultList.get(0).getHour());
Run Code Online (Sandbox Code Playgroud)
有什么方法可以做我想要的吗?
您将要使用以下内容:
public <T extends ObjectName1> List<T> getListOfStuff(List<T> statistics) {
List<T> resultList = new ArrayList<>(statistics.size());
if (!statistics.isEmpty()) {
resultList.add(statistics.get(0));
int date = Integer.parseInt(resultList.get(0).getDate());
int hour = Integer.parseInt(resultList.get(0).getHour());
}
return resultList;
}
Run Code Online (Sandbox Code Playgroud)
现在唯一List可以传递给此方法的s必须是hold ObjectName1或者是扩展它的对象.