Java泛型函数

Java泛型函数,java,generic-programming,Java,Generic Programming,我们可以用java编写泛型函数来添加不同类型的变量吗 例如: 2+3=5(整数加法) “hi”+“I am here”=“hi I am here”(字符串添加)是-有点像,但不使用Java泛型。像这样的事情将是一个开始 public Object add(Object... objects) { // Is there anything in the list that is not a `Number`? boolean allNumbers = true; for

我们可以用java编写泛型函数来添加不同类型的变量吗

例如:

2+3=5(整数加法)


“hi”+“I am here”=“hi I am here”(字符串添加)

是-有点像,但不使用Java泛型。像这样的事情将是一个开始

public Object add(Object... objects) {
    // Is there anything in the list that is not a `Number`?
    boolean allNumbers = true;
    for (Object object : objects) {
        if(!(object instanceof Number)){
            allNumbers = false;
            break;
        }
    }
    if(allNumbers) {
        Number[] numbers = new Number[objects.length];
        for (int i = 0; i < objects.length; i++) {
            numbers[i] = (Number)objects[i];
        }
        return add(numbers);
    } else {
        String[] strings = new String[objects.length];
        for (int i = 0; i < objects.length; i++) {
            strings[i] = String.valueOf(objects[i]);
        }
        return add(strings);
    }
}

public Number add(Number... numbers) {
    BigDecimal sum = new BigDecimal(0);
    for (Number number : numbers) {
        sum = sum.add(BigDecimal.valueOf(number.doubleValue()));
    }
    return sum;
}

public String add(String... strings) {
    StringBuilder sb = new StringBuilder();
    for (String string : strings) {
        sb.append(string);
    }
    return sb.toString();
}

public void test() {
    System.out.println(add(Integer.SIZE, BigInteger.TEN, BigDecimal.ROUND_UNNECESSARY));
    System.out.println(add(Integer.SIZE, BigInteger.TEN, BigDecimal.ROUND_UNNECESSARY, " - Hello"));
}
公共对象添加(对象…对象){
//清单上有没有不是“数字”的东西?
布尔allNumbers=true;
用于(对象:对象){
if(!(对象实例of Number)){
所有数字=假;
打破
}
}
如果(所有数字){
Number[]Number=新编号[objects.length];
for(int i=0;i
印刷品:

49.0

32107-你好


不是那样的。泛型参数类型只能是引用类型。如果“泛型”表示“不特定于类型”,则应研究动态类型语言。对于JVM,您可以考虑使用Groovy。Java不允许你这么做,我真的不明白这个问题怎么会和给定链接上的问题重复。结束这个问题可能有很多原因,但不是重复这个问题。@Ernestkiwel嗯,这个问题相当不清楚。但给出的两个示例指向运算符重载。考虑到问题的质量很差,重复是可以的。仅仅因为一个问题很差,就没有理由去重复一个不相关的问题。这将是对欺骗手段的滥用——结束一个不清楚的问题需要5票,这是一个很好的理由。我喜欢你的勇敢尝试!有趣的但要小心将Long值转换为double值。这可能会因为你很难证明的原因而失去准确性。