在Java中实现向量类的构造函数签名问题

在Java中实现向量类的构造函数签名问题,java,game-engine,vector-graphics,Java,Game Engine,Vector Graphics,我正在用Java构建一个基本的物理引擎,只是为了掌握语言的诀窍,我遇到了一个我认为我知道如何解决的问题,但不是以任何优雅的方式 我希望PVector类有两个可能的构造函数,一个接受x和y坐标,另一个接受角度和半径 例如,我们将publicpvector(双x,双y)作为第一个签名,将publicpvector(双arg,双rad)作为第二个签名。但是,众所周知,一个类中不能有两个具有相同签名的方法,因为Java无法知道调用哪个方法 我可以融合这两个构造函数并使用第三个参数,比如boolean(i

我正在用Java构建一个基本的物理引擎,只是为了掌握语言的诀窍,我遇到了一个我认为我知道如何解决的问题,但不是以任何优雅的方式

我希望PVector类有两个可能的构造函数,一个接受x和y坐标,另一个接受角度和半径

例如,我们将
publicpvector(双x,双y)
作为第一个签名,将
publicpvector(双arg,双rad)
作为第二个签名。但是,众所周知,一个类中不能有两个具有相同签名的方法,因为Java无法知道调用哪个方法


我可以融合这两个构造函数并使用第三个参数,比如boolean(isPolar)或use flags,但这两个方法看起来都很笨拙。我只想知道在Java中做这样的事情最惯用、最明智的方式是什么。任何建议都将不胜感激。

请改用静态工厂

将构造函数设置为私有,并使用适当的名称公开静态方法:

public static PVector makeFromXAndY(double x, double y) {
    return new PVector(...);
}

public static PVector makeFromArgAndRadius(double arg, double radius) {
    return new PVector(...);
}

private PVector(double x, double y) {
    ....
}

Joshua Bloch的《高效Java》一书在这方面做得非常好。

使用静态工厂

将构造函数设置为私有,并使用适当的名称公开静态方法:

public static PVector makeFromXAndY(double x, double y) {
    return new PVector(...);
}

public static PVector makeFromArgAndRadius(double arg, double radius) {
    return new PVector(...);
}

private PVector(double x, double y) {
    ....
}

Joshua Bloch的《高效Java》一书在这方面做得非常好。

您可以使用静态方法构造向量,类似于工厂,调用私有构造函数:

public static PVector fromAngle(double r, double theta){
    return new PVector(/*trig here*/);
}

您可以将其称为
PVector v=PVector.fromAngle(3,Math.PI)
您可以使用构造向量的静态方法,类似于工厂,调用私有构造函数:

public static PVector fromAngle(double r, double theta){
    return new PVector(/*trig here*/);
}

您可以将其称为
PVector v=PVector。从Angle(3,Math.PI)
代替公共构造函数,使用cartisian的静态工厂方法
和polar的
调用私有构造函数,但要清楚参数的含义

不要使用公共构造函数,而是使用Cartisian
的静态工厂方法和Polar
的静态工厂方法调用私有构造函数,但要明确参数的含义

根据您的问题,您可能需要一些必填字段和一些可选字段。您可以使用构建器模式创建实例

  • 即使创建静态方法,也需要一个全参数构造函数,并通过在静态方法中放入一些逻辑来相应地传递参数

  • 根据您的问题,您可能需要一些必填字段和一些可选字段。您可以使用构建器模式创建实例

  • 即使创建静态方法,也需要一个全参数构造函数,并通过在静态方法中放入一些逻辑来相应地传递参数
  • 使用工厂或静态。使用工厂或静态。