使用泛型的原始类型,界限也将被忽略。但是,仅是最高级别的界限。父类保持其边界。这似乎是不一致的行为。
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的界限也忽略,则它将是一致的。 也不是这样!返回类型为数字!
为什么?这对我来说似乎很奇怪。