我想add()用Java 编写单个方法,可以添加整数,字符串等.泛型会帮助我.
我无法理解泛型的终极目标.我感到很困惑.
泛型与重载?
public Integer add(Integer i, Integer j){return i+j;}
public String add(String i, String j){return i+j;}
public <T> T add(T i, T j){return i+j;} //this gives me error.
Run Code Online (Sandbox Code Playgroud)
请让我离开它.
谢谢.
泛型可以提供帮助,这里的问题是+操作仅针对java原语定义,String而不是针对一般类型定义.在Java中,我们不能重载运算符(例如我们可以在C++中执行).
没有泛型的实用解决方案是:
public Integer add(Integer a, Integer b) { return a + b; } // sum of a and b
public String add(String a, String b) { return a + b; } // concatenate operation!
public MyType add(MyType a, MyType b) { return a.add(b); } // requires add operation
Run Code Online (Sandbox Code Playgroud)
其他人指出为什么这不起作用.我想补充一点,我认为你误解了Java泛型的用途.也许您熟悉C++模板,或者使用C宏扩展,这两者都类似于泛型,但却是一个非常不同的东西.
仿制药实际上是关于类型安全和避免混乱的演员表.您告诉编译器某个集合包含字符串,然后它知道您放入或取出的所有内容都必须是字符串.你可以对你输入的内容进行一些编译时检查,并在你拿出的东西上保存一些演员表.
它不会导致编译器根据类型生成不同的代码.泛型不是一种简单的方法,可以避免编写相同函数的"int"版本和"float"版本,就像宏或C++模板一样.您可以通过使用两个实现相同功能的类来获得这种期望的不同行为,但是一个使用int而另一个使用浮点数.但是你可以使用没有泛型的面向对象技术来做到这一点.如果使用"非泛型"面向对象技术无法获得所需的独特行为,那么您也无法使用泛型.