[英]Can I achieve addition of Integers and concatenation of Strings in a single generic method?
我正在学习泛型。我编写了以下代码仅供练习。 在这段代码中,我创建了一个通用方法,用于根据方法调用提供的值添加两个数字并连接两个字符串,它应该添加整数或连接字符串。
class Kaushal28{
public <T> void add(T a, T b){
//System.out.println(a+b);
}
}
public class NewClass59 {
public static void main(String args[]){
Kaushal28 k = new Kaushal28();
k.add(5, 8);
k.add("5","8");
}
}
我不确定这是否可以通过单一方法完成。 如果不是,那么这个问题的解决方案是什么? 我可以通过使用泛型类来实现这一点吗?
你不能把它作为通用方法,但你可以有一个通用策略:
interface Adder<T> { T add(T a, T b); }
然后专门用于字符串和整数:
class StringAdder implements Adder<String> {
@Override public String add(String a, String b) {
return a + b;
}
}
class IntegerAdder implements Adder<Integer> {
@Override public Integer add(Integer a, Integer b) {
return a + b;
}
}
然后,您可以在“单一通用方法”中使用它,如下所示:
<T> void something(Adder<T> adder, T a, T b) {
System.out.println(adder.add(a, b));
}
something(new StringAdder(), "Hello", "World");
something(new IntegerAdder(), 1, 2);
或者,当然:
System.out.println(new StringAdder().add("Hello", "World"));
System.out.println(new IntegerAdder().add(1, 2));
不,不可能有一个涵盖所有类型的泛型方法,因此您需要重载该方法以支持目标类型,但这里有一个涵盖所有Numbers
和CharSequence
的潜在开始:
class Kaushal28 {
public Number add(Number a, Number b){
return a.doubleValue() + b.doubleValue();
}
public CharSequence add(CharSequence a, CharSequence b){
StringBuilder sb = new StringBuilder(a.length() + b.length());
return sb.append(a).append(b).toString();
}
}
public class Kaushal28<T> {
public T add(T a, T b){
dynamic a1 = a;
dynamic b1 = b;
return a1+b1;
}
}
public class NewClass59
{
public static void Main(string[] args)
{
Kaushal28<int> ob =new Kaushal28<int>();
Console.WriteLine(ob.add(5,2));
Kaushal28<string> obj =new Kaushal28<string>();
Console.WriteLine(obj.add("5","2"));
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.