AutoBoxing / Unboxing无法处理返回类型?

时间:2015-12-31 06:38:24

标签: java

请查看以下代码

public class Parent {
    public Object doSomething() {
        return null;
    }
}

class Child extends Parent {
    public Integer doSomething() {
        return 0;
    }
}

在协方差下这是完美的并且编译得很好。

在哪里

public class Parent {
    public Integer doSomething() {
        return null;
    }
}

class Child extends Parent {
    public int doSomething() {
        return 0;
    }
}

不编译。但它可以很容易地在自动装箱和拆箱下改造自己吗?

1 个答案:

答案 0 :(得分:1)

在第一种情况下代码编译因为java支持Covariance,这意味着,

如果Cat是Animal的Subtype,那么只要Animal类型的表达式可以使用,就可以使用Cat类型的表达式。

据说第一种情况很好。

来到第二个案例,

Autoboxing是Java编译器在基元类型和相应的对象包装类之间进行的自动转换。例如,将int转换为Integer,将double转换为Double,依此类推。

它是包装器和它的原语之间的直接关系,这并不意味着intInteger的子类

int ---> Integer  //conversion, not subtype