我有两种不同类型的集合需要迭代,其中一个集合的对象的值需要求和。我如何使用泛型来做这件事,也就是说,不需要为每种类型的集合编写两个求和方法?
private Double calculateFooScoreSum(final Set<Foo> fooScoreSet)
{
Double sum = 0.0;
for (final Foo score : fooScoreSet)
{
sum += score.getScore();
}
return sum;
}
private Double calculateBarScoreSum(final Set<Bar> barScoreSet)
{
Double sum = 0.0;
for (final Bar score : barScoreSet)
{
sum += score.getScore();
}
return sum;
}
我如何使用泛型作为一个方法来编写上述两个方法。类似于:
private static Double calculateScoreSum(Set<?> scoreSet)
{
Double sum = 0.0;
for(Object scoreObj : scoreSet){
//Some casting magic
sum+=score.getScore();
}
return sum;
}
如果有帮助,Foo
和Bar
类中都存在getScore()
方法。任何想法和建议都是非常感谢的。谢谢
发布于 2012-09-17 09:34:18
定义一个公共接口,比如Scorable
public interface Scorable {
int getScore();
}
并用Foo
和Bar
实现了它
public class Foo implements Scorable {
public int getScore () { return 1; }
}
public class Bar implements Scorable {
public int getScore () { return 2; }
}
然后,使用wildcards定义一个可以接受任何类型的Scorable
的方法
private static Double calculateScoreSum(Set<? extends Scorable> scoreSet) {
Double sum = 0.0;
for (Scorable score : scoreSet){
sum += score.getScore();
}
return sum;
}
它可以接收Set<Foo>
或Set<Bar>
,因为它们都实现了Scorable
。
https://stackoverflow.com/questions/12452176
复制相似问题