Java 仿制药清单

Java 仿制药清单,java,list,generics,Java,List,Generics,因此,我有一个简单的Java类DatedValue,如下所示: public class DatedValue<V> implements Comparable<DatedValue>{ private V value; private Date date; public DatedValue(V value, Date date){ this.value = value; this.date = date; } public V getValue(

因此,我有一个简单的Java类DatedValue,如下所示:

public class DatedValue<V> implements Comparable<DatedValue>{

private V value;
private Date date;

public DatedValue(V value, Date date){
    this.value = value;
    this.date = date;
}

public V getValue(){
    return value;
}

public Date getDate(){
    return date;
}

@Override
public int compareTo(DatedValue dv) {
    return date.compareTo(dv.date);
}

}
List<DatedValue<Float>> list =  new ArrayList<DatedValue<Float>>();
您使用的是原始日期值。这意味着编译器不知道getValue结果的特定类型,而是将其视为对象。因为关系运算符>仅为数值操作数定义,所以应该会出现编译错误

要修复它,请为DatedValue指定一个类型参数。事实上,修复每一个出现警告的情况,即DatedValue是原始类型。对泛型类型DatedValue的引用应该参数化

导致故障的for循环应包括一个类型参数:

for(DatedValue<Float> v : pricedata){
  if(v.getValue() > highesthigh.getValue()){
    highesthigh = v;
  }
}
DateValue类还有许多其他问题

implements子句应该是implements Comparable,compareTo方法应该声明为public int compareTodedValue dv。这将消除原始类型警告

如果实现Comparable,还应该重写equals和hashCode,以便它们产生一致的结果。这意味着当日期相同时,compareTo方法应该返回到比较值


另外,您可以直接访问字段,而不是使用您定义的访问器方法。您应该将DateValue声明为final,以便无法覆盖这些访问器。

显示您的调用站点和comipler错误。很可能您在代码中未显示的某个地方使用了原始DatedValue。请显示如何从列表中访问DatedValue。当从列表中获取DatedValue时,不要忘记将其泛型类型也设置为Float。这就是问题所在!我把foratedvalue:pricedata改成了foratedvalue v:pricedata,它成功了。我想我只是假设Java会自动引用这些信息
if(v.getValue() > highesthigh.getValue()){

Exception in MomentumFormula
java.lang.RuntimeException: Uncompilable source code - bad operand types for binary operator '>'
  first type:  java.lang.Object
  second type: java.lang.Float
for(DatedValue<Float> v : pricedata){
  if(v.getValue() > highesthigh.getValue()){
    highesthigh = v;
  }
}