【发布时间】:2015-09-11 21:45:46
【问题描述】:
所以我有一个简单的 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>>();
我可以用 DatedValue
但是,当我尝试使用此列表中 DatedValue 的 getValue 函数时,它返回一个 Object 而不是 Float。我终其一生都无法弄清楚为什么。
感谢任何帮助!
编辑:
这是整个上下文。这可能会很混乱。
public class MomentumFormula {
private List<DatedValue<Float>> pricedata;
private List<Integer> upmomentumdata;
private List<Integer> downmomentumdata;
public MomentumFormula(String stock, GregorianCalendar startdate,
GregorianCalendar enddate){
pricedata = new ArrayList<>();
upmomentumdata = new ArrayList<>();
downmomentumdata = new ArrayList<>();
DBManager db = new DBManager("stockdata");
try{
Connection dbconn = db.getConnection();
Statement stmt = dbconn.createStatement();
String tablename = stock;
if(tablename.contains(".")){
tablename = new StringBuilder("stock").
append(tablename.replace(".", "period")).toString();
}else{
tablename = new StringBuilder("stock").
append(tablename).toString();
}
ResultSet rs = stmt.executeQuery(new StringBuilder(
"SELECT * FROM ").append(tablename).
append(" WHERE date BETWEEN STR_TO_DATE('").
append((startdate.get(Calendar.MONTH) + 1)).append(", ").
append(startdate.get(Calendar.DATE)).append(", ").
append(startdate.get(Calendar.YEAR)).
append("', '%m, %d, %Y')").append(" AND ").
append("STR_TO_DATE('").
append((enddate.get(Calendar.MONTH) + 1)).append(", ").
append(enddate.get(Calendar.DATE)).append(", ").
append(enddate.get(Calendar.YEAR)).
append("', '%m, %d, %Y')").
toString());
while(rs.next()){
pricedata.add(new DatedValue<>(rs.getFloat("close"),
rs.getDate("date")));
}
Collections.sort(pricedata);
if(pricedata.size() != 0){
DatedValue<Float> first = pricedata.get(0);
DatedValue<Float> highesthigh = new DatedValue<>(
first.getValue(), first.getDate());
DatedValue<Float> lowestlow = new DatedValue<>(
first.getValue(), first.getDate());
if(highesthigh.getValue() > lowestlow.getValue()){}
for(DatedValue v : pricedata){
if(v.getValue() > highesthigh.getValue()){
highesthigh = v;
}
}
}
}catch(Exception e){
System.out.println("Exception in MomentumFormula");
System.out.println(e.toString());
}
}
}
错误发生就行了:
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
【问题讨论】:
-
向我们展示您的调用站点和编译器错误。
-
很可能您在未显示的代码中某处使用了原始
DatedValue。请说明您如何从列表中访问您的DatedValue。 -
当您从列表中获取 DatedValue 时,不要忘记将其泛型类型也设置为 Float。
-
这就是问题所在!我将 for(DatedValue : pricedata) 更改为 for(DatedValue
v : pricedata) 并且它起作用了。我想我只是假设 Java 会自动引用这些信息。