2011-03-25 55 views
5

所以,我需要的功能与API像番石榴有双向功能吗?

interface BiFunction<A, B> { 
    B aToB(A input); 
    A bToA(B input); 
} 

是否番石榴提供SMT这样。如果不是,你会建议什么名字为aToB/bToA方法?

+0

是的,我可以用两个不同的函数用于此目的。 – 2011-03-25 17:45:53

回答

7

不,目前在番石榴中没有这样的东西。像这样的东西可能会来(见this issue,以及this issue一些相关的讨论)。

对于名字,我不知道什么是最好的,但我更喜欢像applyapplyInverse超过aToBbToA

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如你所说。不要因为使用泛型而使它们重载,并且不要使用toA,因为您不是在转换函数本身,而是在转换参数。

3

截至2014年年底,番石榴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) 
+0

Guava已经迁移到github上面的链接不再有效。以下是新链接: https://google.github.io/guava/releases/19.0/api/docs/com/google/common/base/Converter.html – Drew 2016-06-15 15:54:27