Java 仿制药清单
因此,我有一个简单的Java类DatedValue,如下所示: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(
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;
}
}