作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
public class ClassGenericParameterized<T> {
public void add(T t1, T t2){
//System.out.println(t1+t2);
System.out.println(Integer.parseInt(t1.toString()) + Integer.parseInt(t2.toString()));
}
public void multiply(T t1, T t2){
System.out.println(Integer.parseInt(t1.toString()) * Integer.parseInt(t2.toString()));
}
public void subtract(T t1, T t2){
System.out.println(Integer.parseInt(t1.toString()) - Integer.parseInt(t2.toString()));
}
public void division(T t1, T t2){
System.out.println(Integer.parseInt(t1.toString()) / Integer.parseInt(t2.toString()));
}
public static void main(String[] args) {
ClassGenericParameterized<Integer> ob = new ClassGenericParameterized<Integer>();
ob.add(1,2);
ob.multiply(2, 4);
ob.subtract(15, 6);
ob.division(6, 3);
}
}
在java中使类泛型化的逻辑和需求是什么
当替换语句时
ClassGenericParameterized<Integer> ob = new ClassGenericParameterized<Integer>()
由
ClassGenericParameterized<Double> ob = new ClassGenericParameterized<Double>()
给出
Error(The method add(Double, Double) in the type ClassGenericParameterized<Double> is not applicable for the arguments (int, int))
按照我的想法,这是因为在 add 方法内部编写的语句为 Integer.parseInt(t1.toString()) + Integer.parseInt(t2.toString())
所以再次尝试替换该语句
System.out.println(Integer.parseInt(t1.toString()) + Integer.parseInt(t2.toString()));
由
System.out.println(t1+t2)
这给出了
Error(The operator + is undefined for the argument type(s) T, T).
那么这怎么能成为真正意义上的通用呢?有人可以解释一下为什么会发生这种情况以及如何纠正此错误以实现我的功能吗?
最佳答案
在这种情况下,泛型不太适合。原因:
您不能简单地声明任何能够进行加法、减法、乘法或除法的类型。 T
上限为 Object
.
如果将界限设置为 <T extends Number>
,这仍然行不通,因为您不能保证您可以将该参数中想要的任何内容自动装箱为类型 T
该类是绑定(bind)的。
最终,您将需要考虑使用 Number
相反作为你的参数。自 Number
是所有数字包装器的父类,包括 BigInteger
和BigDecimal
,您可以利用它。
public class NumberOperations {
public void add(Number t1, Number t2){
//System.out.println(t1+t2);
System.out.println(Integer.parseInt(t1.toString()) + Integer.parseInt(t2.toString()));
}
public void multiply(Number t1, Number t2){
System.out.println(Integer.parseInt(t1.toString()) * Integer.parseInt(t2.toString()));
}
public void subtract(Number t1, Number t2){
System.out.println(Integer.parseInt(t1.toString()) - Integer.parseInt(t2.toString()));
}
public void division(Number t1, Number t2){
System.out.println(Integer.parseInt(t1.toString()) / Integer.parseInt(t2.toString()));
}
public static void main(String[] args) {
NumberOperations ob = new NumberOperations();
ob.add(1, 2);
ob.multiply(2, 4);
ob.subtract(15, 6);
ob.division(6, 3);
}
}
关于java - 在java中使类泛型化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32129531/
我是一名优秀的程序员,十分优秀!