/* * Copyright (C) 2007 Google Inc. Licensed under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with the * License. You may obtain a copy of the License at * http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law * or agreed to in writing, software distributed under the License is * distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the specific language * governing permissions and limitations under the License. */ package com.google.common.base; /** * A transformation from one object to another. For example, a {@code * StringToIntegerFunction} may implement * <code>Function<String,Integer></code> and transform integers in {@code * String} format to {@code Integer} format. * <p> * The transformation on the source object does not necessarily result in an * object of a different type. For example, a {@code FarenheitToCelsiusFunction} * may implement <code>Function<Float,Float></code>. * <p> * Implementations which may cause side effects upon evaluation are strongly * encouraged to state this fact clearly in their API documentation. * * @param <F> * the type of the function input * @param <T> * the type of the function output * @author Kevin Bourrillion * @author Scott Bonneau */ public interface Function<F, T> { /** * Applies the function to an object of type {@code F}, resulting in an * object of type {@code T}. Note that types {@code F} and {@code T} may or * may not be the same. * * @param from * the source object * @return the resulting object */ T apply(F from); /** * Indicates whether some other object is equal to this {@code Function}. * This method can return {@code true} <i>only</i> if the specified object * is also a {@code Function} and, for every input object {@code o}, it * returns exactly the same value. Thus, {@code function1.equals(function2)} * implies that either {@code function1.apply(o)} and {@code * function2.apply(o)} are both null, or {@code * function1.apply(o).equals(function2.apply(o))}. * <p> * Note that it is always safe <em>not</em> to override * {@link Object#equals}. */ boolean equals(Object obj); }