1bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor/* 21d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Copyright (C) 2007 The Guava Authors 3bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor * 4bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor * Licensed under the Apache License, Version 2.0 (the "License"); 5bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor * you may not use this file except in compliance with the License. 6bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor * You may obtain a copy of the License at 7bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor * 8bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor * http://www.apache.org/licenses/LICENSE-2.0 9bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor * 10bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor * Unless required by applicable law or agreed to in writing, software 11bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor * distributed under the License is distributed on an "AS IS" BASIS, 12bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor * See the License for the specific language governing permissions and 14bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor * limitations under the License. 15bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor */ 16bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor 17bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnorpackage com.google.common.base; 18bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor 191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Collections; 20bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnorimport java.util.HashMap; 21bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnorimport java.util.Map; 22bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor 23bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor/** 24bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor * This class provides default values for all Java types, as defined by the JLS. 25bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor * 26bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor * @author Ben Yu 27bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor */ 28bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnorpublic final class Defaults { 29bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor private Defaults() {} 30bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor 311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static final Map<Class<?>, Object> DEFAULTS; 32bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor 331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert static { 341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Map<Class<?>, Object> map = new HashMap<Class<?>, Object>(); 351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert put(map, boolean.class, false); 361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert put(map, char.class, '\0'); 371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert put(map, byte.class, (byte) 0); 381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert put(map, short.class, (short) 0); 391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert put(map, int.class, 0); 401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert put(map, long.class, 0L); 411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert put(map, float.class, 0f); 421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert put(map, double.class, 0d); 431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert DEFAULTS = Collections.unmodifiableMap(map); 44bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor } 45bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor 461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static <T> void put(Map<Class<?>, Object> map, Class<T> type, T value) { 471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.put(type, value); 48bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor } 49bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor 50bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor /** 511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Returns the default value of {@code type} as defined by JLS --- {@code 0} for numbers, {@code 521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * false} for {@code boolean} and {@code '\0'} for {@code char}. For non-primitive types and 531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * {@code void}, null is returned. 54bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor */ 55bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor @SuppressWarnings("unchecked") 56bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor public static <T> T defaultValue(Class<T> type) { 57bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor return (T) DEFAULTS.get(type); 58bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor } 59bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor} 60