我有一个类,它有责任使用两个输入参数创建一个简单的方法。该方法需要用于在其他类中创建其他方法。我的问题是,我写它的方式看起来是否正确?当在另一个类中调用此方法时,它会是什么样的?
public class IntlDensity {
static double p = PhysicalConst.pi;
public IntlDensity(double m, double r) {
}
public double irho (double mass, double rad) {
return(mass/(((4.0/3)*p*Math.pow(rad, 3))));
}
}
答案 0 :(得分:3)
您可能想要做的是:
public class PhysicalBody {
private double mass;
private double rad;
public PhysicalBody(double m, double r) {
this.mass = m;
this.rad = r;
}
public double getIrho() {
return(mass/(((4.0/3)*PhysicalConst.pi*Math.pow(rad, 3))));
}
public double getMass() { return mass; }
public double getRad() { return rad; }
}
这会创建一个新对象,存储您在构造函数中指定的mass
和rad
,然后您可以根据需要查询该对象的irho。请注意,我已将该类命名为更好地描述它包含的内容。考虑对象,而不是活动。
您现在可以根据需要添加更多方法。
一般来说,从另一个类中提取静态值并以你的方式复制它们是一个坏主意 - 只需要像我这里一样引用它或者进行静态导入,这样你就不需要PhysicalConst.
所有的时间,但实际上仍然引用相同的值。
您还可以考虑使质量和rad保持不变,具体取决于您是否预期它们会发生变化。
答案 1 :(得分:2)
根据您的实际代码,您可能希望将质量等传递给构造函数,并且不要将任何内容传递给irho,尽管数学类通常只对静态字段和方法很好。
答案 2 :(得分:1)
首先,无论您是新手还是经验丰富的老手,您都会回顾代码并意识到它可能会更好。
在这种情况下,没有神奇的方法可以知道你是否可以“更好地”编写你的课程,但你提示最好的方法 - 你班级客户的观点。换句话说,想象一下使用IntlDensity
的代码将如何显示。
一种方法是使用Test-Driven Development。这需要一些人习惯,但单元测试作为一般事项是改进类的API的好方法,因此它对其调用者有意义。
关于这个类我可以做的一点是你应该使用你的构造函数:
public class IntlDensity {
private double mass;
private double rad;
public IntlDensity(double mass, double rad) {
this.mass = mass;
this.rad = rad;
}
public double irho() {
return mass/(((4.0/3) * PhysicalConst.PI * Math.pow(rad, 3)));
}
}
然后你的客户会这样做:
IntlDensity id = new IntlDensity(5, 10);
System.out.println(id.irho());
当然这取决于你想要做什么。这就是为什么考虑到你的来电者问题。
答案 3 :(得分:0)
我建议你的方法static
如此 -
public class IntlDensity {
private static final double PI = PhysicalConst.pi; // A local PI constant?
public static double irho(double mass, double rad) { // Static
return (mass / (((4.0 / 3) * PI * Math
.pow(rad, 3))));
}
}
答案 4 :(得分:0)
您是否有理由要实例化IntlDensity
对象?如果没有,你可以让方法静态并调用它
...
IntlDensity.irho(5,2);
public class IntlDensity {
static double p = PhysicalConst.pi;
public static double irho (double mass, double rad) {
return(mass/(((4.0/3)*p*Math.pow(rad, 3))));
}
}