gpt4 book ai didi

java - 有限的通用类型

转载 作者:行者123 更新时间:2023-11-29 03:57:32 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com