我想我该如何编程我的班级以接受整数和浮点数,我想我需要使用泛型,对吗?

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.
}


有什么想法如何对我的班级进行编程以完全接受浮点数,整数和双精度吗?

最佳答案

目前,我们无法在intdouble之类的原语上使用泛型,因此您将不得不使用装箱的表示形式。为intdouble单独创建一个类确实更容易。但是,如果您想使用泛型,可以按照以下方法以类型安全的方式(使用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/

10-11 22:22
查看更多