我想用只有一个每个操作的通用方法,包装类型等而进行像加,减,乘,除基本的算术运算Integer,Float,Double...(不BigDecimal和BigInteger).
我尝试使用泛型类做类似以下的事情(用于添加).
public final class GenericClass<E extends Number> {
public E add(E x, E y) {
return x + y; // Compile-time error
}
}
Run Code Online (Sandbox Code Playgroud)
它发出编译时错误,
operator +不能应用于E,E
有没有办法使用这样的通用版本来实现这样的操作?
不,你不能这样做,因为+运算符不是Number类的一部分.你可以做的是创建一个抽象基类并从中扩展:
static void test() {
MyInteger my = new MyInteger();
Integer i = 1, j = 2, k;
k = my.add(i, j);
System.out.println(k);
}
static public abstract class GenericClass<E extends Number> {
public abstract E add(E x, E y);
}
static public class MyInteger extends GenericClass<Integer> {
@Override
public Integer add(Integer x, Integer y) {
return x + y;
}
}
Run Code Online (Sandbox Code Playgroud)
(我将这些类设置为静态以便于测试,但您可以删除此修饰符.)
您还可以添加一个抽象函数,该函数将获取并返回参数并返回Number类型的值并覆盖它和子类,但返回值所需的转换将失去其用途.
| 归档时间: |
|
| 查看次数: |
8569 次 |
| 最近记录: |