我正在尝试创建一个仅接受两种类型(即整数和 double )的通用类,就好像我只使用 Double 类型创建类一样,当我将相同的类用于只有 int 字段的对象。
代码如下:
public class Freq implements Comparable {
private String term;
public double frequency;
public String getTerm() {
return term;
}
public void setTerm(String term) {
this.term = term;
}
public Freq( String term, int frequency ) {
this.term = term;
this.frequency = frequency;
}
public int compareTo(Object arg) {
if(this.frequency == ((Freq)arg).frequency)
return 0;
else if( this.frequency > ((Freq)arg).frequency ) {
return 1;
}
else
return -1;
}
现在你可以看到这个类的成员频率是两倍,但我想
保留通用但仅限于 double 和整数。但是,如果我添加通用类型,例如 <T extends Number>
,然后 compareTo 方法失败(它说 operator > 没有在 Numbers 或 T 上定义,...),我无法弄清楚为什么,因此我需要你的帮助。
提前致谢
最佳答案
你可以通过使用像这样的东西使它完全通用:
public class Freq<N extends Number & Comparable<N>> implements Comparable<Freq<N>> {
private final N frequency;
public Freq(N frequency) {
if (frequency == null) {
throw new IllegalArgumentException("frequency must be non-null");
}
this.frequency = frequency;
}
public int compareTo(Freq<N> other) {
return frequency.compareTo(other.frequency);
}
}
但是如果对象大小是您最关心的问题,那么这可能不是最佳解决方案,因为您需要存储对包装器对象的引用(Double
或 Integer
) 除了对象本身,这几乎肯定比仅存储 double
本身要大。
因此,实现一个仅提供 double
值的简单 Frequency
类实际上可能有助于安全空间。
关于java - 有限的通用类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5474886/