首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >重载重写的泛型方法- java

重载重写的泛型方法- java
EN

Stack Overflow用户
提问于 2019-04-27 07:42:27
回答 1查看 57关注 0票数 2

我正在复习过去的一些试卷,复习一次java考试,对于这个问题,我完全被方法重载的用法难住了。

问题是:

考虑下面的Java接口。

代码语言:javascript
运行
复制
public interface Converter<A, B> { 
    B convert(A xs); 
}

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

(b)编写一个适当地实现上述接口的类StringConverter。具体地说,该类应该有一个公共Integer convert(String word)方法,其行为如下:

·如果word为空引用,则抛出IllegalArgumentException。

·否则,该方法返回word的长度。

以下是我所做的工作:

Converter.java

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-27 07:48:13

你需要做的就是像这样实现接口:

代码语言:javascript
运行
复制
public class StringConverter implements Converter<String, Integer> { 
    //...
}

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

代码语言:javascript
运行
复制
@Override
public Integer convert(String word) {
    if (word == null)
        throw new IllegalArgumentException();
    return word.length();
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55876053

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档