从数组中返回一系列数字?

时间:2014-03-05 23:40:22

标签: java arraylist interface

我有一个像这样的方法 -

public IntSequence subSequence(int index, int size) {
//IntSequence is an interface and currently this thing is inside a class that's
//implementing it

    ArrayList<Integer> valuelist = new ArrayList<>();
    for(int i = a1; i <= a2 + a1; i++)
    {
        if((a1 + a2) <= a.length)
        valuelist.add(a[i]);
    }
    return valuelist;
}

我的问题是,我只想返回一个整数序列,但是我在这里返回的是一个ArrayList,编译器说不能从IntSequence类型转换为ArrayList。

(我不允许更改方法的参数)

感谢您承认此问题!

编辑:

这是我的IntSequence界面 -

public interface IntSequence {

   int length();

   int get(int index);

   void set(int index, int value);

   IntSequence subSequence(int index, int size);
}

3 个答案:

答案 0 :(得分:1)

如果没有看到IntSequence,就很难给出具体答案。但你可能想做类似的事情:

class ArrayIntSequence implements IntSequence {

    private ArrayList<Integer> arr;

    public ArrayIntSequence (ArrayList<Integer> arr) {
        this.arr = arr;
    }

    public ... 
    // provide bodies for all the methods defined in IntSequence, implemented
    // using "arr"

}

然后return中的subSequence语句变为

return new ArrayIntSequence(valuelist);

编辑:现在你已经包含了IntSequence的定义,lengthgetset的实现非常使用类似的ArrayList方法很简单,看起来你已经有了subSequence,除了你可以调整它以使用ArrayList而不是数组。

答案 1 :(得分:1)

试试这个:

public IntSequence subSequence(int index, int size) {
    // ...
    final ArrayList<Integer> valuelist = new ArrayList<>();
    // ...
    return new IntSequence() {
       // Compiler will tell you what to put here
    };
 }

编译器会给你一些错误,告诉你需要实现哪些方法才能返回IntSequence。如果这太多了,您可能想要创建实现该接口的类的新对象,并查看是否可以将正确的内容传递给构造函数。

答案 2 :(得分:0)

您的方法实现了一个返回IntSequence的方法。如果您尝试返回ArrayList<Integer>,则实际上并未实现该界面。您需要将ArrayList转换为IntSequence,然后返回。