首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在循环中转换泛型类型Java 7

在循环中转换泛型类型Java 7
EN

Stack Overflow用户
提问于 2012-09-17 09:31:46
回答 1查看 277关注 0票数 3

我有两种不同类型的集合需要迭代,其中一个集合的对象的值需要求和。我如何使用泛型来做这件事,也就是说,不需要为每种类型的集合编写两个求和方法?

代码语言:javascript
运行
复制
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;
}

我如何使用泛型作为一个方法来编写上述两个方法。类似于:

代码语言:javascript
运行
复制
private static Double calculateScoreSum(Set<?> scoreSet)
{
    Double sum = 0.0;
    for(Object scoreObj : scoreSet){
        //Some casting magic 
        sum+=score.getScore();
    }
    return sum;
}

如果有帮助,FooBar类中都存在getScore()方法。任何想法和建议都是非常感谢的。谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-17 09:34:18

定义一个公共接口,比如Scorable

代码语言:javascript
运行
复制
public interface Scorable {
  int getScore();
}

并用FooBar实现了它

代码语言:javascript
运行
复制
public class Foo implements Scorable {
  public int getScore () { return 1; }
}

public class Bar implements Scorable {
  public int getScore () { return 2; }    
}

然后,使用wildcards定义一个可以接受任何类型的Scorable的方法

代码语言:javascript
运行
复制
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

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12452176

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档