Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
重载重写的泛型方法-java_Java_Generics_Overriding_Overloading - Fatal编程技术网

重载重写的泛型方法-java

重载重写的泛型方法-java,java,generics,overriding,overloading,Java,Generics,Overriding,Overloading,我正在复习一些过去的论文,准备参加java考试,对于这个问题使用方法重载,我完全感到困惑 问题是: 考虑以下Java接口 public interface Converter<A, B> { B convert(A xs); } 公共接口转换器{ B转换(A x); } (a) 在接口转换器中编写一个默认方法convertAll,该方法将ArrayList xs作为输入并返回一个新的ArrayList。如果ArrayList xs为[x1,…,xn],则该方法返回[c

我正在复习一些过去的论文,准备参加java考试,对于这个问题使用方法重载,我完全感到困惑

问题是:

考虑以下Java接口

public interface Converter<A, B> { 
    B convert(A xs); 
}
公共接口转换器{
B转换(A x);
}
(a) 在接口转换器中编写一个默认方法convertAll,该方法将ArrayList xs作为输入并返回一个新的ArrayList。如果ArrayList xs为[x1,…,xn],则该方法返回[convert(x1),…,convert(xn)]。在您的方法中,您可以假设xs从不为null。如果其中一个convert调用引发异常,则您的方法不应捕获该异常

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

•如果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;
    }
}
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??
    }
}
包com.sp2.bbk.q4;
导入java.util.ArrayList;
公共接口转换器{
B转换(A x);
默认ArrayList convertAll(ArrayList xs){
ArrayList newArrayList=新ArrayList();
for(A:xs){
newArrayList.add(convert(a));
}
返回newArrayList;
}
}
StringConverter.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;
    }
}
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??
    }
}
包com.sp2.bbk.q4;
导入java.util.ArrayList;
公共类StringConverter实现转换器{
私有ArrayList字符串列表;
公共字符串转换器(){
this.stringList=新的ArrayList();
}
公共ArrayList getStringList(){
返回字符串列表;
}
公共整数转换(字符串字){
if(word==null)
抛出新的IllegalArgumentException();
返回word.length();
}
@凌驾
公共B转换(A xs){
//这里发生了什么??
}
}
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);
    }
}
package com.sp2.bbk;
导入com.sp2.bbk.q4.StringConverter;
导入java.util.ArrayList;
公共班机{
公共静态void main(字符串[]args){
//问题4
StringConverter StringConverter=新的StringConverter();
stringConverter.getStringList().add(“This”);
stringConverter.getStringList().add(“is”);
stringConverter.getStringList().add(“a”);
stringConverter.getStringList().add(“句子”);
ArrayList convertedList=stringConverter.convertAll(stringConverter.getStringList());
系统输出打印项次(转换列表);
}
}
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();
}

我认为您不需要将类型作为参数传递给
StringConverter
类,请尝试删除它!现在可以工作了,谢谢!我认为如果你想实现一个通用接口,你也必须给类参数化类型,但显然不行,这很有效。干杯