[英]Class method and constructor confusion in java
我有一個類,它有責任用兩個輸入參數創建一個簡單的方法。 該方法需要用於在其他類中創建其他方法。 我的問題是,我寫它的方式看起來是否正確? 當在另一個類中調用此方法時,它會是什么樣子?
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))));
}
}
你可能想做的是:
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保持不變。
根據您的實際代碼,您可能希望將質量等傳遞給構造函數,並且不要將任何內容傳遞給irho,盡管數學類通常只有靜態字段和方法。
首先,無論你是新手還是經驗豐富的老手,你都會回顧代碼並意識到它可能會更好。
在這種情況下,沒有神奇的方法可以知道你是否可以“更好地”編寫你的課程,但你提示最好的方法 - 你班級客戶的觀點。 換句話說,想象一下使用IntlDensity
的代碼將如何顯示。
一種方法是使用測試驅動開發 。 這需要一些人習慣,但單元測試作為一般事項是改進類的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());
當然這取決於你想要做什么。 這就是為什么考慮到你的來電者問題。
我建議讓你的方法像這樣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))));
}
}
您是否有理由想要實例化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))));
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.