@Override
public int compareTo(Object o) {
if(o instanceof Goods){
Goods goods = (Goods)o;
if(this.price > goods.price)
return 1;
if(this.price < goods.price)
return -1;
if(this.price == goods.price)
return 0;
}else{
}
throw new RuntimeException("参数类型输入错误");
}
这是我重写的compareTo(); if(o instanceof Goods){ 能进这个if就表示参数类型肯定对了 所以我就想把throw抛的异常放进else中(这样 当参数对了 就不用走异常这行代码了) 当时放进去进报错 应该是关于return的问题 放进去 就说我Missing return statement(缺少返回值语句 当时我这个代码 不是无论如何都会有返回值的)
关于重写compareTo(); 的问题
为什么重写compareTo();之后 只return了几个数字 就比出大小了 没看懂源码
String类可以用compareTo(); 让字符串从大到小排列吗
我的问题可能有点呆 大lao们见谅
问题出在
if(this.price > goods.price)
return 1;
if(this.price < goods.price)
return -1;
if(this.price == goods.price)
return 0;
这三个if 你认为必走一个,但是编译器不知道,它认为存在都不走的可能性。如果这样就没有返回值了。所以建议你改成 if-else if-else
@Override
public int compareTo(Object o) {
if (!(o instanceof Goods)) {
throw new RuntimeException("参数类型输入错误");
}
Goods goods = (Goods) o;
if (this.price > goods.price) {
return 1;
} else if (this.price < goods.price) {
return -1;
} else {
return 0;
}
}
你必须保证函数无论如何都要有返回值啊
有些分支不返回你让编译器怎么办
throw了就不需要return了,它跟return功能一样
你不能把所有的throw和return都放进分支里,除非分支是完备的
否则最后应该有一个return或者throw来兜底