在番石榴中是否有双向功能?

时间:2011-03-25 17:45:26

标签: java guava

所以,我需要使用像

这样的API函数
interface BiFunction<A, B> {
    B aToB(A input);
    A bToA(B input);
}

Guava是否提供了这样的smt。如果不是,您建议使用aToB / bToA方法的名称?

3 个答案:

答案 0 :(得分:6)

不,目前在番石榴中没有这样的东西。类似的内容可能即将到来(请参阅this issue,以及this issue进行相关讨论。)

对于姓名,我不知道什么是最好的,但我更喜欢applyapplyInverse而不是aToBbToA

答案 1 :(得分:4)

截至2014年底,Guava 19.0拥有它:

https://google.github.io/guava/releases/19.0/api/docs/com/google/common/base/Converter.html

B b = Converter.convert(a);
A a = Converter.reverse().convert(b);

您需要实施这些方法:

protected abstract A    doBackward(B b)
protected abstract B    doForward(A a)

答案 2 :(得分:2)

至于建议的名称,这取决于你想要的通用程度。一些现有的例子是:

interface Codec <I, O> {
    public O encode(I in);
    public I decode(O out);
}

interface Format <R, F> {
    public F format(R raw);
    public R parse(F formatted);
}

如果您希望它是超级通用的,我会按照您的建议使用aToBbToA。不要因为你使用Generics而使它们超载,并且不使用toA,因为你没有转换函数本身,你正在转换一个参数。