3 回答
TA贡献1898条经验 获得超8个赞
另一个答案行不通,但如果我们稍微修改一下,它就可以工作:
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
}
但这比超载要丑陋得多。
TA贡献1829条经验 获得超7个赞
您可以采用通用方法,而不是重载。
public static class Utils {
public static <T extends Number> Number multiply(T x, T y) {
if (x instanceof Integer) {
return ((Integer) x).intValue() + ((Integer) y).intValue();
} else if (x instanceof Double) {
return ((Double) x).doubleValue() + ((Double) y).doubleValue();
}
return 0;
}
}
并像这样使用它
Utils.<Double>multiply(1.2, 2.4); // allowed
Utils.<Integer>multiply(1.2, 2.4); // not allowed
Utils.<Integer>multiply(1, 2); // allowed
TA贡献1805条经验 获得超10个赞
当然有可能。首先,double 函数可以接受 int 值,因此如果需要,您可以将其用于两者。但是,如果您仍然想实现目标,最好的方法是使用泛型。另一种方法是让您的方法接受两个类的父类(例如 Object),然后进行适当的转换,如下所示:
public class Add {
enum ParamType {
INT,
DOUBLE
}
public static Object add(Object i, Object j, ParamType paramType) {
if (paramType.equals(ParamType.INT)) {
return (int) i + (int) j;
} else {
return (double) i + (double) j;
}
}
public static void main(String[] args) {
System.out.println(add(3.4, 5.2, ParamType.DOUBLE));
System.out.println(add(3, 5, ParamType.INT));
}
}
添加回答
举报