您不能,因爲您需要指定UnivariateOperator的通用屬性。如果你只是想那樣的TimeSeries,你會需要像
public class TimeSeriesSampler {
public static <T> TimeSeries<T> sample(TimeSeries<T> timeseries) {
...
}
}
,但如果你想有一個SamplingOperator來實現UnivariantOperator,你需要指定通用的通用方法。如果你仍然不想指定,你可以使用如
public class SamplingOperator implements UnivariateOperatior<Object> {
private SamplingOperator(){
}
public <T> TimeSeries<T> sample(TimeSeries<T> timeseries) {
return null;
}
@Override
public TimeSeries<Object> operateOn(TimeSeries<Object> timeseries) {
...
}
}
但你會失去通用的權力。另一種方式是
public class SamplingOperator<S> implements UnivariateOperatior<S> {
private SamplingOperator(){
}
public <T> TimeSeries<T> sample(TimeSeries<T> timeseries) {
return null;
}
@Override
public TimeSeries<S> operateOn(TimeSeries<S> timeseries) {
return timeseries;
}
}
,但「聞香」不好,因爲樣品的方法給出了一類方法的感覺,而不是一個實例之一。這是你的選擇。
http://stackoverflow.com/questions/252055/java-generics-wildcards這是不是做了類似於你想要的東西? – 2012-03-13 23:32:49
在您的代碼示例中,T是TimeSeries的類型,因此您不會指定SamplingOperator的類型,而只是TimeSeries。 – Caps 2012-03-13 23:38:50
你的問題令人困惑:接口有一個'operateOn'方法,但是子類有一個'sample'方法,它覆蓋了一些東西。你想要整個子類還是'sample'獨立於類型?也許SamplingOperator不應該是UnivariateOperator的實現。 – toto2 2012-03-14 00:46:59