编写名为MyType的泛型类的标头。这堂课应该 有两个类型参数。第一个类型参数的上限 应该是Number类。第二个类型参数的上限 应该是String类。
看起来像这样吗?
public class MyType<T extends Number> {}
我如何将第二个类型参数作为上限?我可以做扩展Number extends String吗?
答案 0 :(得分:3)
你这样声明
public class TestThis <T extends Number, X extends String> {}
你 x extends String 有效,请记住String是最后一个类而你无法扩展它。 Eclipse给了我这个警告:
类型参数X不应受最终类型String的限制。最终类型无法进一步扩展
答案 1 :(得分:1)
你误解了这个问题:它要求你给这个类两个类型参数,每个参数都有一个绑定,而不是一个带有两个边界的类型参数。
例如,此类有两个类型参数T
和U
:
public class MyType<T, U> { }
我会留下你其他答案来添加界限。
编辑请注意,如果您确实需要单个类型参数的多个上限,请使用&
来分隔它们:
<T extends B1 & B2 & B3>
但由于Java没有多重继承,因此额外的上限只能是接口。在此,B1
可以是类或接口,而B2
和B3
必须是接口(参考:Java Tutorials)。
答案 2 :(得分:1)
我如何将第二个类型参数作为上限?我可以做扩展Number extends String吗?
您可以添加由,
分隔的第二个参数,例如:
public class MyType<T extends Number, S extends String> {
}
虽然看起来很奇怪,因为String是一个最终类,但你仍然可以将它扩展为上限。
声明如下:MyType<Long,String> myType = new MyType<Long, String>();
答案 3 :(得分:1)
如果A
的上限为B
,则表示A extends B
。因此,您的声明应如下所示:
public class MyType<T extends Number, U extends String> {
...
}
您被要求有两个类型参数(不只是您现有的一个),因此上面是T
和U
。 但我应该注意: String
为final
,因此U
类型String
不能成为U
的扩展名(尽管String
可以仍然是{{1}})。