src/main/java/isomorphic/Isomorphism.java
static <A, B> Isomorphism<A, B> of(Function<A, B> f, Function<B, A> g) {
        return new Isomorphism<A, B>() {

            @Override
            public B apply(A a) {
                return f.apply(a);
            }

            @Override
            public Isomorphism<B, A> inverse() {
                return of(g, f);
            }
        };
    }
/**
     * Creates an isomorphism from a pair of functions,
     * where {@code f} is the {@link #apply(Object) apply} function,
     * and {@code g} is the {@link #inverse() inverse} function.
     *
     * @throws NullPointerException if {@code f} or {@code g} is null
     */
Creates an isomorphism from a pair of functions,
where  f is the  #apply(Object) apply function,
and  g is the  #inverse() inverse function.

@throws NullPointerException if  f or  g is null
Creates an isomorphism from a pair of functions where f is the #apply ( Object ) apply function and g is the #inverse () inverse function . @throws NullPointerException if f or g is null
static <A, B> Isomorphism<A, B> of(Function<A, B> f, Function<B, A> g) {
        return new Isomorphism<A, B>() {
            @Override
            public B apply(A a) {
                return f.apply(a);
            }
            @Override
            public Isomorphism<B, A> inverse() {
                return of(g, f);
            }
        };
    }
static < A , B > Isomorphism < A , B > of ( Function < A , B > f , Function < B , A > g ) { return new Isomorphism < A , B > ( ) { @ Override public B apply ( A a ) { return f . apply ( a ) ; } @ Override public Isomorphism < B , A > inverse ( ) { return of ( g , f ) ; } } ; }
Creates an isomorphism from a pair of functions,
 where {@code f} is the {@link #apply(Object) apply} function,
 and {@code g} is the {@link #inverse() inverse} function.
Creates an isomorphism from a pair of functions where { @code f } is the { @link #apply ( Object ) apply } function and { @code g } is the { @link #inverse () inverse } function .