[英]Initialize final variable within constructor in another method
我有一個問題並不是那么大,但仍然讓我思考如何使用Java構造函數和方法。
我有一個代表我聲明最終的半徑的常量,並且還公開供所有人查看。 當我永遠不會改變半徑時,我不希望我的代碼充斥着getRadius()方法。
我想在構造函數中初始化常量,因為我想在分配半徑之前應用某些條件,必須滿足某些條件。 但是,這些條件確實占用了一些空間,我想將它們放在其他方法中,以使構造函數更清晰。
整個事情最初看起來像這樣
public MyProblematicClass {
public final int radius;
public MyProblematicClass(... variables ...) {
if(... long criteria ...) {
radius = n;
}
}
}
而且我喜歡它最終會像
public MyProblematicClass {
public final int radius;
public MyProblematicClass(... variables ...) {
this.setRadiuswithCriteria(criteria);
}
private void setRadiuswithCriteria(criteria crit) {
if(... crit ...) {
radius = n;
}
我知道我可能會將該方法用於其他目的,這就是給我一個'空白字段RADIUS的原因可能尚未初始化,所以我想知道是否有辦法添加一個只會是用於建造者,為清潔起見。
怎么樣(使用小半徑的半徑,因為它不是常數,如評論中所指出的):
public MyProblematicClass(... variables ...) {
radius = getRadiusWithCriteria(criteria);
}
private int getRadiusWithCriteria(criteria crit) {
if(... crit ...) {
return n;
} else {
return 0;
}
}
您不能在構造函數外部分配最終變量。 如你所說,方法:
setRadiuswithCriteria(criteria crit) {
if(... crit ...) {
RADIUS = n;
}
可以在構造函數外部使用。
並且您必須在構造函數中將final變量設置為某個值,而不僅僅是在檢查某些條件后(總是,有時不是)。
但是,您可以使用某個函數的返回值將代碼移到構造函數之外。 例:
class MyClass {
private final double i;
public MyClass() {
i = someCalculation();
}
private double someCalculation() {
return Math.random();
}
}
這樣做怎么樣?
public MyProblematicClass {
public final int RADIUS;
public MyProblematicClass(... variables ...) {
RADIUS = this.setRadiuswithCriteria(criteria);
}
private int setRadiuswithCriteria(criteria crit) {
if(... crit ...) {
return n;
}
return 0;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.