私は時系列データを表すクラスを書いていますつまり、基本的には、ジェネリック型T
ジェネリックパラメータは
interface TimeSeries<T> {
void add(Instant when, T data);
}
私たちは実装を処理するクラスの一部をため(Instant, T)
ペアのマップインタフェース
interface TimeStamped {
Instant getTimeStamp();
}
と私は明示的に時間を明記せずに、このようなデータ項目を追加するためにTimeSeries
インターフェースでより便利な方法を提供したいです。基本的には、私は望んでいます
interface TimeSeries<T> {
void add(Instant when, T data);
default <X extends T & TimeStamped> void add(X data) {
add(data.getTimeStamp(), data);
}
}
but this seems not allowed by the language because I cannot use type variables in intersection typesです。静的型安全性を放棄することを回避する回避策はありますか?私が思い付くことができる唯一のものは
add(TimeStamped t, T data)
interface TimeSeries<T> {
void add(Instant when, T data);
default void add(TimeStamped data) {
add(data.getTimeStamp(), (T)data);
}
default void add(TimeStamped t, T data) {
add(t.getTimeStamp(), data);
}
}
あるタイプセーフが、それでも不便です。
シンプルな回避策は 'interface TimeStampedTimeSeries TimeSeries 012 extends TimeStamped extends TimeSeries 'でしょう。タイムズリーにデータを入力するときに使用でき、それを消費するときに 'TimeSeries >'を参照することができます。 –
assylias
もう1つの回避策は静的メソッドstatic void add(TimeSeries super X> timeSeries、X x) –
@cppbeginnerを使用することです。 – Vlasec