为什么原始类型会不一致地忽略边界检查?

时间:2019-06-09 11:43:20

标签: java generics

使用泛型的原始类型,界限也将被忽略。但是,仅是最高级别的界限。父类保持其边界。这似乎是不一致的行为。

public class GenericType
{
    public static void main(String[] args)
    {
        ExampleExtended<?> example1 = null;
        ExampleExtended example2 = null;

        Integer result1 = example1.get();
        Number result2 = example2.get();
    }
}

abstract class GenericExample<C extends Number>
{
    public abstract C get();
}

abstract class ExampleExtended<C extends Integer> extends GenericExample<C>
{
}

由于ExampleExtended的定义范围,example2.get()的预期返回类型为Integer,带通配符的“ example1”就是这种情况。 但是,似乎由于原始类型,由于某种原因,边界会被忽略,返回类型不是整数。

现在,您希望返回类型为“对象”。由于忽略了ExampleExtended的界限,因此如果毕竟也将GenericExample的界限也忽略,则它将是一致的。 也不是这样!返回类型为数字!

为什么?这对我来说似乎很奇怪。

0 个答案:

没有答案