OT: Algol68 RSRE имеет любопытное "/: =" оператор. например,
INT quotient:=355, remainder;
remainder := (quotient /:= 113);
Предоставление частного 3 и остатка от 16.
Примечание: обычно значение" (x/: = y)" отбрасывается, поскольку частное "x" присвоено ссылкой, но в случае RSRE возвращенное значение является остатком.
Я подозреваю, что простейший способ - иметь карту:
private final static Map<Class<?>, Object> defaultValues =
new HashMap<Class<?>, Object>();
static
{
defaultValues.put(String.class, "");
defaultValues.put(Integer.class, 0);
defaultValues.put(int.class, 0);
defaultValues.put(Long.class, 0L);
defaultValues.put(long.class, 0L);
defaultValues.put(Character.class, '\0');
defaultValues.put(char.class, '\0');
// etc
}
К счастью, все эти типы неизменяемы, поэтому можно возвращать ссылку на один и тот же объект при каждом вызове одного и того же типа.