java - 重载重写的泛型方法 - java
问题描述
我正在通过阅读一些过去的论文来修改 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 永远不会为空。如果对 convert 的调用之一引发异常,则您的方法不应捕获它。
(b) 编写一个适当地实现上述接口的类 StringConverter。特别是,该类应该有一个方法 public Integer convert(String word) ,其行为如下:
• 如果word 是空引用,则抛出IllegalArgumentException。
• 否则,该方法返回单词的长度。
这是我所做的:
转换器.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;
}
}
字符串转换器.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??
}
}
主.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() 方法并实际进行转换。我要么启动一个无限递归循环,要么得到一个模棱两可的方法调用警告。这不是作业,只是复习。任何让我理解这一点的帮助将不胜感激。
解决方案
你需要做的是实现这样的接口:
public class StringConverter implements Converter<String, Integer> {
//...
}
然后可以像这样覆盖您的方法:
@Override
public Integer convert(String word) {
if (word == null)
throw new IllegalArgumentException();
return word.length();
}
推荐阅读
- typescript - 量角器黄瓜打字稿:未定义。使用以下代码段实现:
- reactjs - onClick 阻止所需的验证。为什么?
- javascript - 谷歌云端硬盘上传文件
- javascript - 我正在尝试使用 chrome.storage.sync 和 chrome.tabs.create 传输用户输入的数据并将其用作 chrome.tabs api 的 url
- scala - 尝试将数据帧的每一行与另一个数据帧的某些行组合时最合适的连接类型
- arm - 使用 qemu 和 gdb-multiarch 时的非法指令
- c++ - 查找从起点到目的地的所有可能航班
- php - 如何使用 php 访问 JSON 数组并将其连接到 html
- airflow - 气流 dag 始终在 BashOperator dag 中运行
- node.js - 在 nodejs 项目文件夹中使用 create-react-app 时的依赖冲突