Вы не можете, поскольку вам необходимо указать общий вариант 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 Не делает ли это что-то похожее на то, что вы хотите? –
В вашем примере кода T является типом TimeSeries, поэтому вы не укажете тип SamplingOperator, просто TimeSeries. – Caps
Ваш вопрос путается: интерфейс имеет метод 'operationOn', но подкласс имеет метод' sample', который переопределяет что-то. Вы хотите, чтобы весь подкласс или просто «образец» не зависел от типа? Возможно, SamplingOperator не должен быть реализацией UnivariateOperator. – toto2