Returns the default value of {@code type} as defined by JLS --- {@code 0} for numbers, {@code false} for {@code boolean} and {@code '\0'} for {@code char}. For non-primitive types and {@code void}, {@code null} is returned.
(Class<T> type)
| 40 | * {@code void}, {@code null} is returned. |
| 41 | */ |
| 42 | @SuppressWarnings({ |
| 43 | "unchecked", |
| 44 | "BooleanLiteral" // `(T) false` would produce an error |
| 45 | }) |
| 46 | public static <T> @Nullable T defaultValue(Class<T> type) { |
| 47 | checkNotNull(type); |
| 48 | if (type.isPrimitive()) { |
| 49 | if (type == boolean.class) { |
| 50 | return (T) Boolean.FALSE; |
| 51 | } else if (type == char.class) { |
| 52 | return (T) Character.valueOf('\0'); |
| 53 | } else if (type == byte.class) { |
| 54 | return (T) Byte.valueOf((byte) 0); |
| 55 | } else if (type == short.class) { |
| 56 | return (T) Short.valueOf((short) 0); |
| 57 | } else if (type == int.class) { |
| 58 | return (T) Integer.valueOf(0); |
| 59 | } else if (type == long.class) { |
| 60 | return (T) Long.valueOf(0L); |
| 61 | } else if (type == float.class) { |
| 62 | return (T) FLOAT_DEFAULT; |
| 63 | } else if (type == double.class) { |
| 64 | return (T) DOUBLE_DEFAULT; |
| 65 | } |
| 66 | } |
| 67 | return null; |
| 68 | } |
| 69 | } |