猿问

Java 方法重载——在某些情况下将方法合并为一个方法?

虽然我了解方法重载的重要性,但我很好奇是否可以为以下代码编写单个添加函数:


public class Add {


    public int add(int i, int j) {

        return i + j;

    }

    public double add(double i, double j) {

        return i + j;

    }

}


慕勒3428872
浏览 118回答 3
3回答

汪汪一只猫

另一个答案行不通,但如果我们稍微修改一下,它就可以工作:public Number add(Number i, Number j) {    if(i instanceof Integer && j instanceof Integer) {        return i.intValue() + j.intValue();    } else if(i instanceof Double && j instanceof Double) {        return i.doubleValue() + j.doubleValue();    } //you can check for more number subclasses    return null; //or throw and exception}   但这比超载要丑陋得多。

千巷猫影

您可以采用通用方法,而不是重载。public static class Utils {public static <T extends Number> Number multiply(T x, T y) {&nbsp; &nbsp; if (x instanceof Integer) {&nbsp; &nbsp; &nbsp; &nbsp; return ((Integer) x).intValue() + ((Integer) y).intValue();&nbsp; &nbsp; } else if (x instanceof Double) {&nbsp; &nbsp; &nbsp; &nbsp; return ((Double) x).doubleValue() + ((Double) y).doubleValue();&nbsp; &nbsp; }&nbsp; &nbsp; return 0;&nbsp; &nbsp;}}并像这样使用它Utils.<Double>multiply(1.2, 2.4); // allowedUtils.<Integer>multiply(1.2, 2.4); // not allowedUtils.<Integer>multiply(1, 2); // allowed

holdtom

当然有可能。首先,double 函数可以接受 int 值,因此如果需要,您可以将其用于两者。但是,如果您仍然想实现目标,最好的方法是使用泛型。另一种方法是让您的方法接受两个类的父类(例如 Object),然后进行适当的转换,如下所示:public class Add {&nbsp; &nbsp;enum ParamType {&nbsp; &nbsp; &nbsp; &nbsp;INT,&nbsp; &nbsp; &nbsp; &nbsp;DOUBLE&nbsp; &nbsp;}&nbsp; &nbsp;public static Object add(Object i, Object j, ParamType paramType) {&nbsp; &nbsp; &nbsp; &nbsp;if (paramType.equals(ParamType.INT)) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return (int) i + (int) j;&nbsp; &nbsp; &nbsp; &nbsp;} else {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return (double) i + (double) j;&nbsp; &nbsp; &nbsp; &nbsp;}&nbsp; &nbsp;}&nbsp; &nbsp;public static void main(String[] args) {&nbsp; &nbsp; &nbsp; &nbsp;System.out.println(add(3.4, 5.2, ParamType.DOUBLE));&nbsp; &nbsp; &nbsp; &nbsp;System.out.println(add(3, 5, ParamType.INT));&nbsp; &nbsp;}}
随时随地看视频慕课网APP

相关分类

Java
我要回答