延伸的层次结构是什么?例如,数字,整数等等。
例如,
public class Foo<extends Integer>
{.....}
这会接受哪种类型?
班上最高的类型是什么? 班上最低的类型是什么?
答案 0 :(得分:2)
如果您要完成通用声明,那么您将拥有上限通用类型。
public class Foo<T extends Integer> { }
此处,T
必然是 或从 Integer
扩展的任何内容。但是,由于Integer
是final
类,因此它只能保留Integer
。
因此,像这样的声明是编译时合法并强制执行的:
Foo<Integer> foo = new Foo<>();
Foo bar = new Foo(); // This will produce raw type warnings!
...而像这样的声明不是编译时合法的,因为绑定是它必须是或扩展Integer
。
Foo<Long> baz = new Foo<>();
正式地,编译器会告诉你:
Error:(17, 56) java: cannot infer type arguments for Foo<>; reason: no instance(s) of type variable(s) T exist so that Foo<T> conforms to Foo<java.lang.Long>
如果您在Integer
的层次结构中走得更高,则会到达Number
,这样您就可以使用任何扩展Number
的类进行实例化:
public class Foo<T extends Number> { }
然后,Long
泛型类型将是合法的,您的允许类型将是:
Number
Short
Integer
Double
Float
Byte
BigDecimal
BigInteger
......仅举几例。
答案 1 :(得分:1)
它将接受任何指定的类或它的潜在子类。
所以如果我这样做了:
<? extends MyClass>
它允许类型&#34; MyClass&#34;,并说另一个类public class Another extends MyClass
。但它不会接受其他课程。
答案 2 :(得分:1)
你的意思是
public class Foo <T extends Integer>{.....}
T
将接受任何Integer
。
我不明白什么是&#34;最高&#34;和#34;最低&#34;你在这里打字。但是,我相信上述陈述应该足够明确。
e.g。您无法传入Number
(这是Integer的父类)。您可以传递Integer
。如果您的FooInteger
扩展为Integer
,则也可以在此处使用。