[英]Optional parameters: Multiple constructors cause errors
由於在 Java 可選參數是不可能的,我嘗試創建 2 個構造函數。
public class Tts {
public Context context;
private final MediaPlayer _mediaPlayer;
private final CopyBarVisualizer _barTop;
private final CopyBarVisualizer _barBottom;
public Tts(Context context) {
this.context = context;
}
public Tts(Context context, MediaPlayer _mediaPlayer, BarVisualizer _barTop, BarVisualizer _barBottom) {
this.context = context;
this._mediaPlayer = _mediaPlayer;
this._barTop = (CopyBarVisualizer) _barTop;
this._barBottom = (CopyBarVisualizer) _barBottom;
}
}
現在我的問題是私有財產。 我得到了錯誤
變量“_mediaPlayer”可能尚未初始化
在另一種方法中,我想檢查是否設置了屬性。 但是我怎樣才能避免這些錯誤呢?
public class Tts {
public Context context;
private MediaPlayer _mediaPlayer;
private CopyBarVisualizer _barTop;
private CopyBarVisualizer _barBottom;
public Tts(Context context) {
this.context = context;
}
public Tts(Context context, MediaPlayer _mediaPlayer, BarVisualizer _barTop, BarVisualizer _barBottom) {
this.context = context;
this._mediaPlayer = _mediaPlayer;
this._barTop = (CopyBarVisualizer) _barTop;
this._barBottom = (CopyBarVisualizer) _barBottom;
}
}
public class Tts {
public Context context;
private final MediaPlayer _mediaPlayer;
private final CopyBarVisualizer _barTop;
private final CopyBarVisualizer _barBottom;
public Tts(Context context) {
this(context, null, null, null); // to solve the error problem
}
public Tts(Context context, MediaPlayer _mediaPlayer, BarVisualizer _barTop, BarVisualizer _barBottom) {
this.context = context;
this._mediaPlayer = _mediaPlayer;
this._barTop = (CopyBarVisualizer) _barTop;
this._barBottom = (CopyBarVisualizer) _barBottom;
}
}
public class TtsBuilder{
public Context context;
private MediaPlayer _mediaPlayer = null;
private BarVisualizer _barTop = null;
private BarVisualizer _barBottom = null;
public TtsBuilder(Context context) {
this.context = context;
}
public TtsBuilder withMediaPlayer(MediaPlayer _mediaPlayer) {
this._mediaPlayer = _mediaPlayer;
return this;
}
public TtsBuilder withBarTop(BarVisualizer _barTop) {
this._barTop = _barTop;
return this;
}
public TtsBuilder withBarBottom(BarVisualizer _barBottom) {
this._barBottom = _barBottom;
return this;
}
public Tts build() {
return new Tts(context, _mediaPlayer, _barTop, _barBottom);
}
}
public static void main(String[] args){
Tts ttsMedia = new Tts(aContext).withMediaPlayer(aMediaPlayer).build();
Tts ttsBarTopBottom = new Tts(aContext)
.withBarTop(aBarTop)
.withBarBottom(aBarBottom)
.build();
}
Java 中的命名約定建議:
變量名稱不應以下划線 _ 或美元符號 $ 字符開頭,即使兩者都允許。
有關更多詳細信息,您可以查看Oracle 文檔。
如果你想解決錯誤問題,你可以用下面的代碼修復它; 但是,當構造函數初始化 final 字段時,您無法更改它們,因此最好刪除 final 關鍵字。
public class Tts {
public Context context;
private final MediaPlayer _mediaPlayer;
private final CopyBarVisualizer _barTop;
private final CopyBarVisualizer _barBottom;
public Tts(Context context) {
this(context, null, null, null); // to solve the error problem
}
public Tts(Context context, MediaPlayer _mediaPlayer, BarVisualizer _barTop, BarVisualizer _barBottom) {
this.context = context;
this._mediaPlayer = _mediaPlayer;
this._barTop = (CopyBarVisualizer) _barTop;
this._barBottom = (CopyBarVisualizer) _barBottom;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.