Как сделать типизированный / обобщенный параметр в Java? - PullRequest
2 голосов
/ 03 августа 2010

Скажем, у меня есть 2 метода: один добавляет два целых, а другой добавляет два длинных.Где параметры передаются в функцию.

Как я могу сделать 1 метод, который обобщает параметр и возвращаемое значение для выполнения этого?

Ответы [ 4 ]

6 голосов
/ 03 августа 2010

Я видел такой трюк в 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);

Что может вызвать исключение во время выполнения. Тем не менее, если у вас есть метод, возвращаемое значение которого всегда будет приведено сразу после возврата, этот прием может избавить потребителей от необходимости явного приведения значения.

3 голосов
/ 03 августа 2010

К сожалению, я не думаю, что вы можете сделать это.Во-первых, Обобщения Java не могут быть параметризованы над примитивами , поэтому вам придется использовать Integer и Long вместо int и long.Во-вторых, хотя у вас может быть метод с параметром универсального типа T extends Number, нет способа добавить два произвольных подкласса Number универсальным способом.Другими словами, следующий код будет не работать:

public static <T extends Number> T add(T a, T b) {
    return a + b; // Won't compile, as the addition is not legal Java code.
}
1 голос
/ 03 августа 2010
0 голосов
/ 03 августа 2010
long f(long x, long y){ ... }

int x=1, y=2;
f(x,y);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...