Java, как реализовать шаблон функции, как C ++ - PullRequest
0 голосов
/ 04 июля 2018

Мой английский не очень хорош. Поэтому я пытаюсь объяснить мой вопрос в коде. Пожалуйста, попробуйте ответить мне в коде. Это заставляет меня легко понять.

У меня есть вопрос: в C ++ can мы можем понять, что как эти коды.

int max(int x,int y)
{
   return (x>y)?x:y;
}
float max(float x,float y)
{
   return (x>y)?x:y;
}

Я могу сделать это, чтобы развернуть код

template <class T>
T max(T x, T y)
{
return (x>y)?x:y;
}

Как реализовать подобную функцию в Java.

Ответы [ 3 ]

0 голосов
/ 04 июля 2018

Вы можете использовать дженерики. Поскольку дженерики не работают с примитивами, а объекты нельзя сравнивать с операторами больше и меньше, мы должны вместо этого ограничить типы ввода Comparable s (вещи, которые можно сравнивать), чтобы вместо этого мы можем использовать метод compareTo:

public static <T extends Comparable<T>> T max(T first, T second)
{
    return first.compareTo(second) >= 0 ? first : second;
}

Пример использования:

max(1, 2)

будет autobox примитивами Integer s (которые реализуют Comparable<Integer>) и вернет 2.

0 голосов
/ 04 июля 2018

Базовое предположение в коде заключается в том, что тип T поддерживает оператор >. В Java нет перегрузки операторов, но эквивалентным было бы ограничение кода до T s, которые реализуют интерфейс Comparable:

public static <T extends Comparable<T>> T max(T x, T y)
{
    if (x.compareTo(y) > 0) {
        return x;
    }
    return y;
}

Или, в качестве альтернативы, разрешить вызывающей стороне передать пользовательский Comparator:

public static <T> T max(T x, T y, Comparator<T> cmp)
{
    if (cmp.compare(x, y) > 0) {
        return x;
    }
    return y;
}
0 голосов
/ 04 июля 2018

Используйте дженерики. Они похожи на шаблоны, но работают во время выполнения

    package test; 

class BoxPrinter<T> { 
    private T val; 

    public BoxPrinter(T arg) { 
        val = arg; 
    } 

    public String toString() { 
        return "{" + val + "}"; 
    } 

    public T getValue() { 
        return val; 
    } 
    } 

https://www.geeksforgeeks.org/generics-in-java/
Больше примеров здесь

...