java - 使用泛型添加数字和字符串的函数

标签 java generics lambda

在一次采访中,我被要求使用泛型编写一个函数,将传递给它的数字和字符串相加。数字可以是 Integer、Double 等。

如果将 2 个字符串传递给函数,它应该附加这些字符串。最后,应该返回添加的结果。

我使用了 Lambda,如下所述。

public class WorkAround {
    public static void main(String[] args) {
        MyAdd myAdd = new MyAdd();
        System.out.println("Adding Integers: " + myAdd.add(1, 2, (a,b) -> a+ b));
        System.out.println("Adding Double: " + myAdd.add(1.2, 1.2, (a,b) -> a+ b));
        System.out.println("Adding String: " + myAdd.add("James ", "Bond", (a,b) -> a + b));
    }
}

class MyAdd {
    public <T> T add(T a, T b, BinaryOperator<T> operation) {
        return operation.apply(a, b);
    }
}

输出:

Adding Integers: 3
Adding Double: 2.4
Adding String: James Bond

但是后来,我被要求仅使用泛型来实现相同的结果。就像下面的代码片段一样。

public class Trial {
    public static void main(String[] args) {
        MyAdd myAdd = new MyAdd();
        System.out.println("Adding Integers: " + myAdd.add(1, 2));
        System.out.println("Adding Double: " + myAdd.add(1.2, 1.2));
        System.out.println("Adding String: " + myAdd.add("James ", "Bond"));
    }
}

class MyAdd {
    public <T> T add(T a, T b) {
        return a + b;
    }
}

显然,由于以下原因,这不起作用。

The operator + is undefined for the argument type(s) T, T

我找到了this回答我的问题。但这个问题没有处理字符串。还有其他我可能会失踪的方式吗?

最佳答案

我们有 2 种情况,字符串或数字。应该进行这种区分。 下面解决了这个问题。

import java.math.BigDecimal;

public class Trial {
    public static void main(String[] args) {
        MyAdd myAdd = new MyAdd();
        System.out.println("Adding Integers: " + myAdd.add(1, 2));
        System.out.println("Adding Double: " + myAdd.add(1.2, 1.2));
        System.out.println("Adding String: " + myAdd.add("James ", "Bond"));
    }
}

class MyAdd {
    public String add(String a, String b) {
        return a + b;
    }

    public <T extends Number> T add(T a, T b){
        return (T) new BigDecimal(a.toString()).add(new BigDecimal(b.toString()));
    }
}

关于java - 使用泛型添加数字和字符串的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57102184/

相关文章:

java - 如何使用 lambda 从 List<> 中获取总和和最低日期

java - 在java中的预打印信纸上打印

java.lang.UnsupportedClassVersionError :/entirex/xml/mapping/jaxws_asm/package-info : Unsupported major. 次要版本 0.0

java - 泛型定义为子类+接口(interface)

c# - Visual Studio 2008 无法识别 Lambda 表达式语法

java - 有没有办法比较 lambda 表达式?

java - 出现错误 : JavaFX runtime components are missing,,需要在打开可执行 jar 时运行此应用程序

java - 无法在 Netbeans 现有项目中创建 SOAP 客户端

swift - 存储通用类型的项目

Java泛型语法问题