1
public interface UnivariateOperator<T> {
    public TimeSeries<T> operateOn(TimeSeries<T> timeseries);
}

public class SamplingOperator<T> implements UnivariateOperator<T>  {    
    @Override
    public TimeSeries<T> sample(TimeSeries<T> timeseries) {
        ...
    }
}

有没有办法使用通配符,以便采样运算符可以使用任何类型?我真的不想为采样运算符指定类型......它应该适用于任何类型的时间序列。

4

3 回答 3

0

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

但它“闻起来”很糟糕,因为示例方法给人一种类方法的感觉,而不是实例方法。做什么是你的选择。

于 2012-03-13T23:42:06.397 回答
0

如果你做了这样的事情怎么办:

public class SamplingOperator<T> implements UnivariateOperator<T>  {   
    private SamplingOperator(){
    }

    @Override
    public TimeSeries<T> sample(TimeSeries<T> timeseries) {
        ...
    }

    public static SamplingOperator<? extends Object> getInstance() {
        return new SamplingOperator<Object>();
    }
}

这确保了任何实例SamplingOperator都能够接受任何类型的TimeSeries作为其sample方法的参数。

那里可能有更好的解决方案,但这一个会起作用。

于 2012-03-14T00:01:13.037 回答
-2
implements UnivariateOperator<Object>
于 2012-03-13T23:37:37.957 回答