Class有两个类型参数,它们都有一个字符串的上限和数字:Java

时间:2012-09-29 01:45:59

标签: java generics extends

  

编写名为MyType的泛型类的标头。这堂课应该   有两个类型参数。第一个类型参数的上限   应该是Number类。第二个类型参数的上限   应该是String类。

看起来像这样吗?

public class MyType<T extends Number> {}

我如何将第二个类型参数作为上限?我可以做扩展Number extends String吗?

4 个答案:

答案 0 :(得分:3)

你这样声明

 public class TestThis <T extends Number, X extends String> {}

x extends String 有效,请记住String是最后一个类而你无法扩展它。 Eclipse给了我这个警告:

类型参数X不应受最终类型String的限制。最终类型无法进一步扩展

答案 1 :(得分:1)

你误解了这个问题:它要求你给这个类两个类型参数,每个参数都有一个绑定,而不是一个带有两个边界的类型参数。

例如,此类有两个类型参数TU

public class MyType<T, U> { }

我会留下其他答案来添加界限。


编辑请注意,如果您确实需要单个类型参数的多个上限,请使用&来分隔它们:

<T extends B1 & B2 & B3>

但由于Java没有多重继承,因此额外的上限只能是接口。在此,B1可以是类或接口,而B2B3必须是接口(参考: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> {
    ...
}

您被要求有两个类型参数(不只是您现有的一个),因此上面是TU但我应该注意: Stringfinal,因此U类型String不能成为U的扩展名(尽管String可以仍然是{{1}})。