因此,我現在有2個類別(將來可能會有更多類似),它們都表示來自跟蹤的數據如何避免在包裝類上執行的每種方法都檢查包裝對象
private Track track;
private TrackSearchResult trackSearchResult;
這些類是從Json Schema自動生成的。他們沒有關係,但他們包含類似的方法。
所以我創建了一個封裝類來封裝它們,所以我只有一個類用於一切(如播放音軌)。
public class ExoPlayerTrack implements IPlayerTrack {
private Track track;
private TrackSearchResult trackSearchResult;
public ExoPlayerTrack(Track track) {
this.track = track;
}
public ExoPlayerTrack(TrackSearchResult trackSearchResult) {
this.trackSearchResult = trackSearchResult;
}
@Override
public String getTrackName() {
if (track != null) {
return track.getName();
} else if (trackSearchResult != null) {
return trackSearchResult.getTrackName();
} else {
return null;
}
}
我已經定義了一個接口IPlayerTrack,它具有兩個相似的Track類之間的通用方法。
public interface IPlayerTrack {
public String getTrackName();
public String getReleaseName();
public String getArtistName();
public String getTrackId();
public String getReleaseId();
public String getArtistId();
public String getImageUrl();
public long getDuration();
}
所以我需要首先爲空看到從兩個軌道類是用來初始化包裝類,這是非常討厭的檢查,以實現該接口的每個方法。
有什麼辦法可以避免不觸及自動生成的模型類?也許使用Java 8或Guava或設計模式?
@Override
public String getReleaseName() {
if (track != null) { //AVOID
return track.getReleaseName();
} else if (trackSearchResult != null) {
return trackSearchResult.getReleaseName();
} else {
return null;
}
}
@Override
public String getTrackName() {
if (track != null) {
return track.getName();
} else if (trackSearchResult != null) {
return trackSearchResult.getTrackName();
} else {
return null;
}
}
請注意,在某些情況下,方法名稱也稍有不同(getName/getTrackName)。
爲什麼不檢查你得到Track對象的地方是否爲空?檢查對象是否爲空是一種很好的做法,爲什麼要避免它? –