在一次采访中,我被要求使用泛型
编写一个函数,将传递给它的数字和字符串相加。数字可以是 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/