我正在通过阅读一些过去的论文来修订Java考试,并且完全对使用方法重载这个问题感到困惑。
问题是:
考虑以下Java接口。
public interface Converter<A, B> {
B convert(A xs);
}
(a)在接口Converter中编写一个默认方法convertAll,该方法将ArrayList xs作为输入并返回一个新的ArrayList。如果ArrayList xs为[x1,...,xn],则该方法返回[convert(x1),...,convert(xn)]。在您的方法中,您可以假设xs永远不会为null。如果对convert的调用之一引发异常,则您的方法不应捕获该异常。
(b)编写一个StringConverter类,该类适当地实现上述接口。特别是,该类应该具有一个方法 public Integer convert(String word) 其行为如下:
•如果word为空引用,则抛出IllegalArgumentException。
•否则该方法将返回单词的长度。
这是我所做的:
Converter.java
package com.sp2.bbk.q4;
import java.util.ArrayList;
public interface Converter<A, B> {
B convert(A xs);
default ArrayList<B> convertAll(ArrayList<A> xs) {
ArrayList<B> newArrayList = new ArrayList<>();
for (A a : xs) {
newArrayList.add(convert(a));
}
return newArrayList;
}
}
StringConverter.java
package com.sp2.bbk.q4;
import java.util.ArrayList;
public class StringConverter<A, B> implements Converter<A, B> {
private ArrayList<A> stringList;
public StringConverter() {
this.stringList = new ArrayList<>();
}
public ArrayList<A> getStringList() {
return stringList;
}
public Integer convert(String word) {
if (word == null)
throw new IllegalArgumentException();
return word.length();
}
@Override
public B convert(A xs) {
// what happens here??
}
}
Main.java
package com.sp2.bbk;
import com.sp2.bbk.q4.StringConverter;
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
// Question 4
StringConverter<String, Integer> stringConverter = new StringConverter<>();
stringConverter.getStringList().add("This");
stringConverter.getStringList().add("is");
stringConverter.getStringList().add("a");
stringConverter.getStringList().add("sentence");
ArrayList<Integer> convertedList = stringConverter.convertAll(stringConverter.getStringList());
System.out.println(convertedList);
}
}
这看起来很简单,convertAll()方法通过调用convert()方法并将结果存储在列表中,将所有单词转换为代表每个单词多长时间的整数。
我无法解决的是如何使用实现的convert()方法调用StringConverter.java中的另一个convert()方法,并实际进行转换。我要么开始一个无限的递归循环,要么得到一个模棱两可的方法调用警告。这不是作业,只是修订。我们将不胜感激。
答案 0 :(得分:3)
您需要做的是实现这样的接口:
public class StringConverter implements Converter<String, Integer> {
//...
}
然后可以这样重写您的方法:
@Override
public Integer convert(String word) {
if (word == null)
throw new IllegalArgumentException();
return word.length();
}