我有两种不同类型的需要迭代的集合,并且集合中对象的一个值需要求和。我怎么能用泛型来做这个,即不为每种类型的Set写两种求和方法?
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;
}
如何使用Generics作为单个方法编写上述两种方法。喜欢的东西:
private static Double calculateScoreSum(Set<?> scoreSet)
{
Double sum = 0.0;
for(Object scoreObj : scoreSet){
//Some casting magic
sum+=score.getScore();
}
return sum;
}
如果有帮助,getScore()
和Foo
类都存在Bar
方法。
任何想法和建议都非常感谢。
感谢名单
答案 0 :(得分:5)
定义一个通用界面,比如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
。