java如何实现这个接口?

egmofgnx  于 2021-06-27  发布在  Java
关注(0)|答案(2)|浏览(342)

我正在做一些不包含答案的试题,我已经被困了一段时间。我有这个接口(stringcombiner.java)

package section3_apis.part1_interfaces;

public interface StringCombiner {
    String combine(String first, String second);
}

以及这个工厂(combinerfactory.java)

package section3_apis.part1_interfaces;

public class CombinerFactory{
    /**
     * This method serves a StringCombiner that will surround the given arguments with double quotes,
     * separated by spaces and the result surrounded by single quotes.
     *
     * For example, the call
     *      combiner.combine("one", "two")
     * will return '"one" "two"'
     * @return quotedCombiner
     */
    static StringCombiner getQuotedCombiner() {
        //YOUR CODE HERE (and remove the throw statement)

        throw new UnsupportedOperationException("Not implemented yet");
    }

我摆弄它已经有一段时间了,但我不能解决它。到目前为止我尝试的是:我试图让combinerfactory实现接口,然后添加一个重写,但是我不明白接下来如何在getquotedcombiner中使用字符串combine。我还尝试在getquotedcombiner中创建一个新的stringcombiner示例,但我很确定这不是我应该做的。当我尝试其中一种方法时,它会要求我输入combine中的值,但最终目标是使用junit测试。我假设我需要放置一些占位符或者一个实现这个方法的主类,但是仍然让这个方法打开,以便从外部(通过测试)使用。我在这里有点胡扯,只是想把我的想法写在纸上,关于我认为我应该做什么。
我希望能就如何解决这个问题提供一些正确的指导。

wkftcu5l

wkftcu5l1#

假设您只能在 getQuotedCombiner 方法,则需要返回实现 StringCombiner 接口。例如:

static StringCombiner getQuotedCombiner() {
    return new StringCombiner() {
        public String combine(String first, String second) {
            return "'\"" + first + "\" \"" + second + "\"'";
        }
    };
}

使用java 8,您可以使用lambda表达式简化它:

static StringCombiner getQuotedCombiner() {
    return (first, second) -> "'\"" + first + "\" \"" + second + "\"'";
}

例如,如果练习允许您创建其他类,您可以添加一个新类 QuotedStringCombiner 实现接口的:

public class QuotedStringCombiner implements StringCombiner {

    @Override
    public String combine(String first, String second) {
        return "'\"" + first + "\" \"" + second + "\"'";
    }
}

在街上 getQuotedCombiner 方法 CombinerFactory 您可以返回此类的新示例:

static StringCombiner getQuotedCombiner() {
    return new QuotedStringCombiner();
}

或者,实现singleton模式,以避免每次请求引用的组合器时都创建示例:

private static final QuotedStringCombiner QUOTED_COMBINER_INSTANCE = new QuotedStringCombiner();

static StringCombiner getQuotedCombiner() {
    return QUOTED_COMBINER_INSTANCE;
}
zazmityj

zazmityj2#

public class StringCombinerImpl implements StringCombiner {
    public String combine(String first, String second) {
        throw new UnsupportedOperationException("Not implemented yet");
    }
}

换个衣服就行了 throw 语句,其中包含执行方法所需的操作所需的代码。
要使用它,请将示例创建添加到 getQuotedCombiner :

static StringCombiner getQuotedCombiner() {
    return new StringCombinerImpl();
}

相关问题