Я видел такой трюк в GWT:
public static <T> T add(long a, long b)
{
return (T)(Object)(a + b);
}
Используйте это так:
long answer = add(1L, 2L);
int answer2 = add(1, 2);
Хотя это и делает то, что вы просите, недостатком этого подхода является то, что он открывает для вас неудачные приведения типов. Даже несмотря на то, что вам не нужно явно приводить возвращаемое значение, вы все равно эффективно говорите коду выполнить приведение к ожидаемому типу. Вы можете случайно сказать что-то вроде:
String t = add(1, 2);
Что может вызвать исключение во время выполнения. Тем не менее, если у вас есть метод, возвращаемое значение которого всегда будет приведено сразу после возврата, этот прием может избавить потребителей от необходимости явного приведения значения.