Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java 7中强制转换泛型类型_Java_Generics_Java 7 - Fatal编程技术网

在Java 7中强制转换泛型类型

在Java 7中强制转换泛型类型,java,generics,java-7,Java,Generics,Java 7,我有两种不同类型的集合需要迭代,集合中对象的一个值需要求和。如何使用泛型实现这一点,即不为每种类型的集合编写两个求和方法 private Double calculateFooScoreSum(final Set<Foo> fooScoreSet) { Double sum = 0.0; for (final Foo score : fooScoreSet) { sum += score.getScore(); } return

我有两种不同类型的集合需要迭代,集合中对象的一个值需要求和。如何使用泛型实现这一点,即不为每种类型的集合编写两个求和方法

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 Double calculatefoscoresum(最终设置fooScoreSet)
{
双和=0.0;
for(最终Foo分数:fooScoreSet)
{
sum+=score.getScore();
}
回报金额;
}
专用双计算器BarsCoreSum(最终设置barScoreSet)
{
双和=0.0;
适用于(最终酒吧分数:酒吧分数集)
{
sum+=score.getScore();
}
回报金额;
}
如何将泛型作为单个方法编写上述两个方法。比如:

private static Double calculateScoreSum(Set<?> scoreSet)
{
    Double sum = 0.0;
    for(Object scoreObj : scoreSet){
        //Some casting magic 
        sum+=score.getScore();
    }
    return sum;
}
private static Double calculateScoreSum(Set scoreSet)
{
双和=0.0;
对于(对象scoreObj:scoreSet){
//一些施法魔法
sum+=score.getScore();
}
回报金额;
}
如果有帮助,
getScore()
方法在
Foo
Bar
两个类中都存在。 非常感谢您的任何想法和建议。
Thanx

定义一个公共接口,比如说
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; }    
}
然后,使用以下方法定义一种可以接受任何
Scorable
类型的方法:


private static Double calculateScoreSum(SET)另外,没有理由将sum声明为
Double
对象。一个原语类型就可以了。@LanguagesNameAfterCofee:事实上,我们只是在复制OP的原始结构。@João Silva非常感谢。这也解决了许多其他更大的问题。
private static Double calculateScoreSum(Set<? extends Scorable> scoreSet) {
    Double sum = 0.0;
    for (Scorable score : scoreSet){
        sum += score.getScore();
    }
    return sum;
}