Java - 实现 Cloneable 或添加构造函数?

标签 java constructor cloneable

嘿,我实际上正在使用 Java 上的自定义 Vector 类,

public class Vector {

    private double X;
    private double Y;

    public Vector(double x, double y) {
        this.X = x;
        this.Y = y;
    }

    public void setX(double x) {
        this.X = x;
    }
    public double getX(double x) {
        return this.X;
    }

    public void setY(double y) {
        this.Y = y;
    }
    public double getY(double y) {
        return this.Y;
    }

}

我想添加 multiply() 方法,它会像这样按指定的因子返回此 vector *,

public void multiply(double factor) {
    this.X *= factor;
    this.Y *= factor;
}

问题是,当我使用需要 vector 的函数时,我想像这样使用它

doSomething(ancientVector.multiply(-1D));

但是 jvm 不满意,因为我发送给函数的 arg 是一个 void...

我该怎么做才能让它变得干净,我应该实现 Cloneable 还是创建另一个按照 multiply 的方式工作的构造函数?

doSomething(ancientVector.multiply(-1D));

或添加

public Vector(Vector previous, double mFactor) {
    this.X *= previous.getX() * mFactor;
    this.Y *= previous.getY() * mFactor;
}

最佳答案

我会保持类不可变并返回一个新的Vector:

public Vector multiply(double factor) {
    return new Vector(X * factor, Y * factor);
}

关于Java - 实现 Cloneable 或添加构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47021849/

相关文章:

c++ - 什么是 C++ 中的转换构造函数?它是干什么用的?

java - 无法引用同一类中的类对象 A?

java - instanceof - 不兼容的条件操作数类型

java - Java中使用URLEncodedUtils解析汉字

java - JPanel GridBagLayout 到 GridPane

c++ - 错误 : expected constructor, 析构函数,或非常简单的示例中的类型转换

Java 的 Eclipse Galileo 的 "clone()"方法生成器

java - 如何在JFrame上绘图

java - SendEmail 在 Selenium Webdriver 中无法工作 - 未知 SMTP 主机 : smtp. gmail.com;

c++ - 可以在全局对象构造函数中进行打印/记录还是未定义的行为?