/** * Copyright 2010 Wealthfront 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.kaching.platform.guice; import java.lang.reflect.Type; import com.google.inject.TypeLiteral; import com.kaching.platform.common.types.ParameterizedTypeImpl; /** * Factory methods to construct {@link TypeLiteral}s. */ public final class TypeLiterals { private TypeLiterals() {} /** * Creates a new {@link TypeLiteral} for {@code type} parameterized by * {@code parameters}. * * <p>For example, the type {@code Map<Integer, String>} is constructed with * {@code TypeLiterals.get(Map.class, Integer.class, String.class)}. */ @SuppressWarnings("unchecked") public static <T> TypeLiteral<T> get(Class<T> type, Type... parameters) { return (TypeLiteral<T>) TypeLiteral.get(new ParameterizedTypeImpl(type, parameters)); } /** * @see TypeLiterals#get(Class, Type...) */ public static <T> TypeLiteral<T> get(Class<T> type, Class<?>... parameters) { return get(type, (Type[]) parameters); } /** * @see TypeLiterals#get(Class, Type...) */ public static <T> TypeLiteral<T> get(Class<T> type, TypeLiteral<?>... literals) { Type[] types = new Type[literals.length]; for (int i = 0; i < literals.length; i++) { types[i] = literals[i].getType(); } return get(type, types); } }