【问题标题】:Using the enhanced for loop with interfaces in Java?在 Java 中使用带有接口的增强型 for 循环?
【发布时间】:2014-01-23 10:47:30
【问题描述】:

我正在努力加深对 Java 接口的理解,但在一些非常基本的代码方面存在以下问题。

下面创建两个实现相同接口的类。然后我创建两个 ArrayList 来保存这两个类的对象。然后我想创建一个增强的for循环,它遍历每个列表并执行最初在接口中定义的方法。

我认为我可以使用一个循环,而不是将特定的类类型作为其参数,而是可以使用接口类型,这将允许我使用任何实现该接口的类,但似乎我已经做了错误。

我将如何创建一个只允许操作实现接口的类的 for 循环?

interface Valueing{
    double getValue();
}

class Coin implements Valueing
{
    private double coinVal = 0.0;
    Coin(double initVal){
        coinVal = initVal;
    }
    public double getValue(){
        return this.coinVal;
    }
}

class Note implements Valueing
{
    private int noteVal = 0;
    Note(int initVal){
        noteVal = initVal;
    }
    public double getValue(){
        return (double)noteVal;
    }
}

public class IFaceBasics{
    public static void main(String[] args){
        ArrayList<Coin> myChange = new ArrayList<Coin>();
        myChange.add(new Coin(0.01));
        double totalChange = sumValues(myChange);

        ArrayList<Note> myNotes = new ArrayList<Note>();
        myNotes.add(new Note(5));
        double totalNotes = sumValues(myNotes);
    }

    public double sumValues(ArrayList<Valueing> a){
        double totalSum = 0;
        for(Valueing avg : a) 
        {
            totalSum += avg.getAverage();
        }
        return totalSum;
    }
}

感谢您的任何反馈。

【问题讨论】:

  • 你为什么要在Valueing上打电话给getAverage()?这个接口没有这个方法。
  • 编译并运行代码并描述它有什么问题。

标签: java interface foreach


【解决方案1】:

你几乎做对了,你只需要改变

public double sumValues(ArrayList<Valueing> a){

public double sumValues(ArrayList<? extends Valueing> a){

&lt;? extends Valueing&gt; 表示“Valueing 或其任何子类型”,因此这将使该方法接受ArrayList&lt;Coin&gt;ArrayList&lt;Note&gt; 以及ArrayList&lt;Valueing&gt;

【讨论】:

猜你喜欢
  • 2016-01-05
  • 1970-01-01
  • 1970-01-01
  • 2011-01-20
  • 1970-01-01
  • 2020-03-14
  • 2013-06-14
  • 2016-03-23
  • 1970-01-01
相关资源
最近更新 更多