001/* 002 * Copyright 2011 Chris Pheby 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016package org.jadira.bindings.core.api; 017 018/** 019 * Interface for explicitly defining conversions from I to a destination 020 * object type O. 021 * <p> 022 * We utilise super-type tokens to avoid having to include the class type on the 023 * defined method 024 * <p> 025 * Implementations of this class should be idempotent (behaviour should not vary 026 * between calls) and thread-safe. 027 * @param <I> Input type for the conversion 028 * @param <O> Output type 029 */ 030public interface Converter<I, O> { 031 032 /** 033 * Converts from the given I into the specified object 034 * @param inputObject I to transform, not null 035 * @return transformed instance of O (this can be null if appropriate) 036 */ 037 O convert(I inputObject); 038 039 /** 040 * Obtain the bound class 041 * @return Class 042 */ 043 Class<I> getInputClass(); 044 045 /** 046 * Obtain the bound class 047 * @return Class 048 */ 049 Class<O> getOutputClass(); 050}