Java如何实现C ++之类的功能模板

时间:2018-07-04 12:10:26

标签: java c++ max

我的英语不好。因此,我尝试用代码解释我的问题。请尝试用代码回答我。这使我很容易理解。

我有一个问题:在C ++中,我们可以像这些代码一样实现这一点。

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 :(得分:2)

您可以使用泛型。由于泛型不适用于原语,并且无法将对象与大于和小于运算符进行比较,因此,我们必须将输入类型限制为Comparables(可以比较的事物),以便可以使用{改为使用{3}}方法:

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

样品用量:

max(1, 2)

compareTo的原语autobox(实现Comparable<Integer>)并返回2。

答案 1 :(得分:1)

JSON代码中的基本假设是T类型支持>运算符。 Java没有运算符重载,但是等效的方法是将代码限制为实现接口的T s:

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

或者,也可以允许呼叫者传递自定义Comparable

public static <T> T max(T x, T y, Comparator<T> cmp)
{
    if (cmp.compare(x, y) > 0) {
        return x;
    }
    return y;
}

答案 2 :(得分:-2)

使用泛型。它们就像模板,但可以在运行时运行

    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/
这里有更多示例