2

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

看起来像这样正确吗?

public class MyType<T extends Number> {}

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

4

4 回答 4

4

你这样声明

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

x extends String有效,记住 String 是一个最终类,你不能扩展它。Eclipse 给了我这个警告:

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

于 2012-09-29T01:50:06.607 回答
1

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

例如这个类有两个类型参数TU

public class MyType<T, U> { }

我会留给其他答案来增加界限。


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

<T extends B1 & B2 & B3>

但是由于Java没有多重继承,额外的上限只能是接口。在这里,B1可以是类或接口,B2B3必须是接口(参考:Java 教程)。

于 2012-09-29T01:48:29.563 回答
1

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

,您可以添加第二个参数,用like分隔:

public class MyType<T extends Number, S extends String> {
}

虽然它看起来很奇怪,因为 String 是一个最终类,但您仍然可以将其扩展为上限。

声明看起来像:

MyType<Long,String> myType = new MyType<Long, String>();
于 2012-09-29T01:55:10.443 回答
1

如果AB,则表示A extends B。因此,您的声明应如下所示:

public class MyType<T extends Number, U extends String> {
    ...
}

你被要求有两个类型参数(不仅仅是你目前拥有的一个),因此是T上面U的。但我应该注意: String isfinal因此没有类型U可以是String(尽管U仍然可以是String)的扩展。

于 2012-09-29T01:56:32.427 回答