关于throw的一个疑问 帅锅们来看看 写了一半感觉是关于return的问题 还有一个关于重写compareTo(); 的问题


@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来兜底