我有一个像这样的方法 -
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);
}
答案 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
的定义,length
,get
和set
的实现非常使用类似的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,然后返回。