gpt4 book ai didi

java - 重载和重写泛型方法 - java

转载 作者:行者123 更新时间:2023-11-30 07:41:37 26 4
gpt4 key购买 nike

我正在通过浏览一些过去的论文来复习 Java 考试,但对方法重载的使用这个问题完全感到困惑。

问题是:

考虑以下 Java 接口(interface)。

public interface Converter<A, B> { 
B convert(A xs);
}

(a) 在接口(interface) Converter 中编写一个默认方法 convertAll,它将一个 ArrayList xs 作为输入并返回一个新的 ArrayList。如果 ArrayList xs 是 [x1, ..., xn],该方法返回 [convert(x1), ..., convert(xn)]。在您的方法中,您可以假设 xs 永远不会为空。如果对 convert 的调用之一抛出异常,则您的方法不应捕获它。

(b) 编写一个适当实现上述接口(interface)的类StringConverter。特别是,该类应该有一个方法公共(public)整数转换(字符串字)其行为如下:

• 如果 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() 方法并实际进行转换。我要么开始一个无限递归循环,要么得到一个不明确的方法调用警告。这不是作业,只是复习。如果能帮助我理解这一点,我们将不胜感激。

最佳答案

你需要做的是像这样实现接口(interface):


public class StringConverter implements Converter<String, Integer> {
//...
}

然后你的方法可以像这样被覆盖:

@Override
public Integer convert(String word) {
if (word == null)
throw new IllegalArgumentException();
return word.length();
}

关于java - 重载和重写泛型方法 - java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55876053/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com