如何编写一个接受泛型参数的方法?

时间:2013-08-13 17:01:14

标签: java generics stack

在我的java项目中,我使用两个堆栈,一个只保存双精度数,另一个保存整数。

现在我想写一个泛型方法putToStack(element),它接受​​一个元素,它是一个double或一个整数,并将它放到相应的堆栈中。

我的问题是我仍然遇到通用语法的一些问题。基本上我想有这个方法(请更正!)有人可以帮助我实现Java吗?

public void putToStack(Generic parameter) {
    if (isDouble(parameter)) {
        doubleStack.put(parameter);
    } else {
        integerStack.put(parameter);
    }
}

3 个答案:

答案 0 :(得分:2)

如果您需要稍后提取类型,则无需使该方法具有通用性。使用重载方法,每种方法都采用您需要的类型。

public void putToStack(double parameter) {
    doubleStack.put(parameter);
}
public void putToStack(int parameter) {
    integerStack.put(parameter);
}

答案 1 :(得分:0)

只需使用Object作为参数,因为它是所有类的父类,因此可以保存任何子类的对象:

public void putToStack(Object parameter)

注意:但请多考虑一下您的设计。

答案 2 :(得分:0)

您不需要泛型,您正在寻找的是简单的多态性。

java.lang.Number是Integer和Double的基类,所以它是最合适的。但是想想当有人试图在你的方法中添加Float时会发生什么?

在这种情况下,您希望重载方法,以便只允许double和int。这样你可以避免这种情况甚至删除那个丑陋的if语句。

public void putToStack(Double number) {
    doubleStack.put(parameter);
}
public void putToStack(Integer number) {
    integerStack.put(parameter);
}