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