cra*_*150 4 java generics primitive
我正在尝试创建一些Java类,它们应该使用float或double数字(出于模拟目的,我需要支持两者).这些类需要做一些基本的算术,还需要使用三角函数(sin,cos,atan2).
我试着做一个通用的方法.由于Java不允许泛型中的原始类型并且MyClass<T extends Number>确实允许Double和Float,但是基本算法不可能,我在Double和Float周围构建了一个包装类.但是,只要我需要在其中一个泛型类中实例化一个值,这种方法就会失败.
是否有任何干净的方式来支持float和double,而不重复每种类型的所有代码?
也许这就是你要找的?
class MyClass<T extends Number> {
T add(T t1, T t2) {
if (t1 instanceof Double) {
return (T) Double.valueOf((t1.doubleValue() + t2.doubleValue()));
} else if (t1 instanceof Float) {
return (T) Float.valueOf(((t1.floatValue() + t2.floatValue())));
} else if (t1 instanceof Integer) {
return (T) Integer.valueOf(((t1.intValue() + t2.intValue())));
}
// you can add all types or throw an exception
throw new IllegalArgumentException();
}
public static void main(String[] args) {
MyClass<Double> mc = new MyClass<Double>();
mc.add(1.0, 1.1);
}
}
Run Code Online (Sandbox Code Playgroud)
根据经验,如果你在Java中进行核心数值工作,最好坚持原始类型.这意味着仿制药对于这类工作来说是不可取的(但当然对于许多其他用途来说都是完美的).
是否有任何干净的方式来支持float和double,而不重复每种类型的所有代码?
你可以用更高精度的方法实现低精度方法:
public static double calc(double x, double y) {
// do the calculation and return double
}
public static float calc(float x, float y) {
return (float)calc((double)x, (double)y);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2429 次 |
| 最近记录: |