2011-03-25 9 views
5

lo tanto, necesito función con API como¿Hay una función bidireccional en Guava?

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

¿Tiene previsto guayaba SMT como este. Si no, ¿qué nombres sugeriría para los métodos aToB/bToA?

+0

Sí, puedo usar dos funciones diferentes para este propósito . –

Respuesta

7

No, no hay nada como esto en Guava actualmente. Algo como esto puede venir (ver this issue, así como this issue para algunos debates relacionados).

Para los nombres, no sé qué sería lo mejor, pero yo preferiría algo así como apply y applyInverse sobre aToB y bToA.

2

En cuanto a los nombres sugeridos, depende de qué tan genérico quieras ir. Algunos ejemplos existentes son:

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); 
} 

Si usted quiere que sea muy genérica, sólo usaría aToB y bToA como usted sugiere. No los sobrecargue ya que está usando Generics, y no use toA ya que no está convirtiendo la función en sí, está convirtiendo un argumento.

3

A finales de 2014, guayaba 19,0 lo tiene:

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); 

que necesita para implementar los métodos:

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

Guava ha migrado a github y el enlace de arriba ya no funciona. Aquí está el nuevo enlace: https://google.github.io/guava/releases/19.0/api/docs/com/google/common/base/Converter.html – Drew