java - 有限的通用类型

标签 java

我正在尝试创建一个仅接受两种类型(即整数和 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);
  }
}

但是如果对象大小是您最关心的问题,那么这可能不是最佳解决方案,因为您需要存储对包装器对象的引用(DoubleInteger) 除了对象本身,这几乎肯定比仅存储 double 本身要大。

因此,实现一个仅提供 double 值的简单 Frequency 类实际上可能有助于安全空间。

关于java - 有限的通用类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5474886/

相关文章:

java - 打印引号内的属性

Java 字符串或对象的哈希集比较

java - 通过 IMAP 获取电子邮件详细信息

java - 将灰度值从 .csv 转换为 BufferedImage

java - 将图像作为物理文件存储在服务器上

java - spring jsp View 问题

java - 尝试使用 GTKLookAndFeel 在 JavaFX 中设置 SwingNode 的样式会卡住应用程序

java - 有没有像Moodle这样流行的类(class)管理系统?

java - 做猜谜游戏的 while 循环

Java - 如何用颜色而不只是边框填充 Windows L&F 按钮?