您不能,因为您需要指定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