繁体   English   中英

我可以在单个通用方法中实现整数的添加和字符串的连接吗?

[英]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));

不,不可能有一个涵盖所有类型的泛型方法,因此您需要重载该方法以支持目标类型,但这里有一个涵盖所有NumbersCharSequence的潜在开始:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM