我想我该如何编程我的班级以接受整数和浮点数,我想我需要使用泛型,对吗?
public class Vec2 {
private int x, y;
public Vec2(int xa, int ya) {
this.x = xa;
this.y = ya;
}
public Vec2() {
this(0, 0);
}
public Vec2(Vec2 vec) {
this(vec.x, vec.y);
}
public void addX(int xa) {
x+=xa; // I get an exception here when I try to use generics.
}
public void addY(int ya) {
y+=ya; // I get an exception here when I try to use generics.
}
有什么想法如何对我的班级进行编程以完全接受浮点数,整数和双精度吗?
最佳答案
目前,我们无法在int
或double
之类的原语上使用泛型,因此您将不得不使用装箱的表示形式。为int
和double
单独创建一个类确实更容易。但是,如果您想使用泛型,可以按照以下方法以类型安全的方式(使用java8)进行操作:
public class Vec2<T> {
private final BinaryOperator<T> adder;
private T x, y;
private Vec2(BinaryOperator<T> adder, T x, T y) {
this.adder = adder;
this.x = x;
this.y = y;
}
public void addX(T xa) {
x = adder.apply(x, xa);
}
public void addY(T ya) {
y = adder.apply(y, ya);
}
public static Vec2<Integer> ofInt(Integer x, Integer y) {
return new Vec2<>(Integer::sum, x, y);
}
public static Vec2<Double> ofDouble(Double x, Double y) {
return new Vec2<>(Double::sum, x, y);
}
}
Vec2<Integer> intvec = Vec2.ofInt(5, 3);
intvec.addX(8);
Vec2<Double> dblvec = Vec2.ofDouble(5.2, 8.9);
dblvec.addY(-.9);
关于java - Java泛型-接受float和int,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30315402/